@kouji-ui/components 0.1.1 → 0.1.2
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.
- package/fesm2022/kouji-ui-components.mjs +17668 -0
- package/fesm2022/kouji-ui-components.mjs.map +1 -0
- package/package.json +17 -10
- package/types/kouji-ui-components.d.ts +8032 -0
- package/.turbo/turbo-build.log +0 -29
- package/CHANGELOG.md +0 -192
- package/ng-package.json +0 -7
- package/src/accordion/_examples/accordion.default.example.ts +0 -31
- package/src/accordion/_examples/accordion.disabled.example.ts +0 -38
- package/src/accordion/_examples/accordion.multiple.example.ts +0 -31
- package/src/accordion/_examples/accordion.rich-content.example.ts +0 -49
- package/src/accordion/_examples/index.ts +0 -6
- package/src/accordion/accordion.arrow-nav.example.ts +0 -39
- package/src/accordion/accordion.css +0 -68
- package/src/accordion/accordion.playground.ts +0 -119
- package/src/accordion/accordion.spec.ts +0 -117
- package/src/accordion/accordion.ts +0 -153
- package/src/accordion/accordion.usage.example.ts +0 -38
- package/src/accordion/accordion.value.example.ts +0 -60
- package/src/accordion/index.ts +0 -1
- package/src/alert/_examples/alert.banner.example.ts +0 -56
- package/src/alert/_examples/alert.dismissible.example.ts +0 -53
- package/src/alert/_examples/alert.example.ts +0 -40
- package/src/alert/_examples/alert.variants.example.ts +0 -66
- package/src/alert/_examples/alert.with-actions.example.ts +0 -57
- package/src/alert/_examples/index.ts +0 -7
- package/src/alert/alert.css +0 -133
- package/src/alert/alert.playground.ts +0 -111
- package/src/alert/alert.spec.ts +0 -167
- package/src/alert/alert.ts +0 -250
- package/src/alert/alert.usage.example.ts +0 -58
- package/src/alert/index.ts +0 -8
- package/src/avatar/_examples/avatar-group.example.ts +0 -31
- package/src/avatar/_examples/avatar-group.list.example.ts +0 -45
- package/src/avatar/_examples/avatar-group.overflow.example.ts +0 -33
- package/src/avatar/_examples/avatar-group.shapes.example.ts +0 -39
- package/src/avatar/_examples/avatar-group.sizes.example.ts +0 -44
- package/src/avatar/_examples/avatar.default.example.ts +0 -18
- package/src/avatar/_examples/avatar.initials.example.ts +0 -20
- package/src/avatar/_examples/avatar.shapes.example.ts +0 -22
- package/src/avatar/_examples/avatar.sizes.example.ts +0 -26
- package/src/avatar/_examples/avatar.with-image.example.ts +0 -20
- package/src/avatar/_examples/index.ts +0 -12
- package/src/avatar/avatar-group.spec.ts +0 -138
- package/src/avatar/avatar-group.ts +0 -127
- package/src/avatar/avatar-group.usage.example.ts +0 -30
- package/src/avatar/avatar.css +0 -58
- package/src/avatar/avatar.playground.ts +0 -95
- package/src/avatar/avatar.ts +0 -123
- package/src/avatar/index.ts +0 -2
- package/src/badge/_examples/badge.default.example.ts +0 -18
- package/src/badge/_examples/badge.sizes.example.ts +0 -25
- package/src/badge/_examples/badge.variants.example.ts +0 -24
- package/src/badge/_examples/badge.with-dot.example.ts +0 -31
- package/src/badge/_examples/badge.with-icon.example.ts +0 -23
- package/src/badge/_examples/index.ts +0 -7
- package/src/badge/badge.css +0 -59
- package/src/badge/badge.playground.ts +0 -49
- package/src/badge/badge.ts +0 -86
- package/src/badge/badge.usage.example.ts +0 -22
- package/src/badge/index.ts +0 -1
- package/src/breadcrumb/_examples/breadcrumb.custom-separator.example.ts +0 -53
- package/src/breadcrumb/_examples/breadcrumb.example.ts +0 -48
- package/src/breadcrumb/_examples/breadcrumb.long-path.example.ts +0 -58
- package/src/breadcrumb/_examples/breadcrumb.truncated.example.ts +0 -59
- package/src/breadcrumb/_examples/breadcrumb.with-icons.example.ts +0 -66
- package/src/breadcrumb/_examples/index.ts +0 -7
- package/src/breadcrumb/breadcrumb.css +0 -121
- package/src/breadcrumb/breadcrumb.playground.ts +0 -93
- package/src/breadcrumb/breadcrumb.spec.ts +0 -230
- package/src/breadcrumb/breadcrumb.ts +0 -272
- package/src/breadcrumb/breadcrumb.usage.example.ts +0 -45
- package/src/breadcrumb/index.ts +0 -1
- package/src/button/_examples/button.anchor.example.ts +0 -18
- package/src/button/_examples/button.configured.example.ts +0 -43
- package/src/button/_examples/button.disabled.example.ts +0 -25
- package/src/button/_examples/button.example.ts +0 -22
- package/src/button/_examples/button.icon.example.ts +0 -27
- package/src/button/_examples/button.loading.example.ts +0 -31
- package/src/button/_examples/button.pressed.example.ts +0 -24
- package/src/button/_examples/button.sizes.example.ts +0 -26
- package/src/button/_examples/button.usage.example.ts +0 -66
- package/src/button/_examples/button.variants.example.ts +0 -26
- package/src/button/_examples/index.ts +0 -12
- package/src/button/button.css +0 -263
- package/src/button/button.playground.ts +0 -79
- package/src/button/button.spec.ts +0 -100
- package/src/button/button.ts +0 -150
- package/src/button/index.ts +0 -1
- package/src/button-group/_examples/button-group.example.ts +0 -30
- package/src/button-group/_examples/button-group.icon-only.example.ts +0 -30
- package/src/button-group/_examples/button-group.toggle.example.ts +0 -36
- package/src/button-group/_examples/button-group.variants.example.ts +0 -40
- package/src/button-group/_examples/button-group.vertical.example.ts +0 -29
- package/src/button-group/_examples/index.ts +0 -7
- package/src/button-group/button-group.css +0 -80
- package/src/button-group/button-group.playground.ts +0 -94
- package/src/button-group/button-group.spec.ts +0 -119
- package/src/button-group/button-group.ts +0 -130
- package/src/button-group/button-group.usage.example.ts +0 -35
- package/src/button-group/index.ts +0 -1
- package/src/calendar/_examples/calendar.example.ts +0 -33
- package/src/calendar/_examples/index.ts +0 -3
- package/src/calendar/calendar.css +0 -129
- package/src/calendar/calendar.playground.ts +0 -84
- package/src/calendar/calendar.spec.ts +0 -50
- package/src/calendar/calendar.ts +0 -171
- package/src/calendar/calendar.usage.example.ts +0 -33
- package/src/calendar/index.ts +0 -1
- package/src/card/_examples/card.cover.example.ts +0 -53
- package/src/card/_examples/card.example.ts +0 -27
- package/src/card/_examples/card.full.example.ts +0 -51
- package/src/card/_examples/index.ts +0 -5
- package/src/card/card.css +0 -120
- package/src/card/card.playground.ts +0 -116
- package/src/card/card.spec.ts +0 -50
- package/src/card/card.ts +0 -194
- package/src/card/card.usage.example.ts +0 -46
- package/src/card/index.ts +0 -1
- package/src/carousel/_examples/carousel.autoplay.example.ts +0 -69
- package/src/carousel/_examples/carousel.example.ts +0 -60
- package/src/carousel/_examples/carousel.indicators.example.ts +0 -64
- package/src/carousel/_examples/carousel.lazy-load.example.ts +0 -85
- package/src/carousel/_examples/carousel.tabs-pattern.example.ts +0 -61
- package/src/carousel/_examples/index.ts +0 -7
- package/src/carousel/carousel.css +0 -181
- package/src/carousel/carousel.playground.ts +0 -135
- package/src/carousel/carousel.spec.ts +0 -211
- package/src/carousel/carousel.ts +0 -399
- package/src/carousel/carousel.usage.example.ts +0 -46
- package/src/carousel/index.ts +0 -1
- package/src/cascade-select/_examples/cascade-select.data-driven.example.ts +0 -119
- package/src/cascade-select/_examples/cascade-select.disabled.example.ts +0 -74
- package/src/cascade-select/_examples/cascade-select.example.ts +0 -80
- package/src/cascade-select/_examples/cascade-select.field.example.ts +0 -73
- package/src/cascade-select/_examples/cascade-select.path.example.ts +0 -85
- package/src/cascade-select/_examples/index.ts +0 -7
- package/src/cascade-select/cascade-select.css +0 -120
- package/src/cascade-select/cascade-select.playground.ts +0 -133
- package/src/cascade-select/cascade-select.ts +0 -201
- package/src/cascade-select/cascade-select.usage.example.ts +0 -44
- package/src/cascade-select/index.ts +0 -5
- package/src/chat/_examples/chat-bubble.example.ts +0 -71
- package/src/chat/_examples/chat-bubble.grouped.example.ts +0 -69
- package/src/chat/_examples/chat-bubble.sides.example.ts +0 -41
- package/src/chat/_examples/chat-bubble.variants.example.ts +0 -58
- package/src/chat/_examples/chat-bubble.with-state.example.ts +0 -57
- package/src/chat/_examples/index.ts +0 -7
- package/src/chat/chat.css +0 -231
- package/src/chat/chat.playground.ts +0 -171
- package/src/chat/chat.spec.ts +0 -343
- package/src/chat/chat.ts +0 -269
- package/src/chat/chat.usage.example.ts +0 -49
- package/src/chat/index.ts +0 -13
- package/src/checkbox/_examples/checkbox.checked.example.ts +0 -20
- package/src/checkbox/_examples/checkbox.default.example.ts +0 -20
- package/src/checkbox/_examples/checkbox.disabled.example.ts +0 -26
- package/src/checkbox/_examples/checkbox.indeterminate.example.ts +0 -20
- package/src/checkbox/_examples/checkbox.usage.example.ts +0 -62
- package/src/checkbox/_examples/index.ts +0 -7
- package/src/checkbox/checkbox.css +0 -74
- package/src/checkbox/checkbox.playground.ts +0 -68
- package/src/checkbox/checkbox.ts +0 -122
- package/src/checkbox/index.ts +0 -1
- package/src/color-picker/_examples/color-picker.alpha.example.ts +0 -36
- package/src/color-picker/_examples/color-picker.example.ts +0 -34
- package/src/color-picker/_examples/color-picker.hex-input.example.ts +0 -53
- package/src/color-picker/_examples/color-picker.in-form.example.ts +0 -60
- package/src/color-picker/_examples/color-picker.usage.example.ts +0 -58
- package/src/color-picker/_examples/color-picker.with-presets.example.ts +0 -45
- package/src/color-picker/_examples/index.ts +0 -8
- package/src/color-picker/color-picker.css +0 -183
- package/src/color-picker/color-picker.playground.ts +0 -83
- package/src/color-picker/color-picker.spec.ts +0 -94
- package/src/color-picker/color-picker.ts +0 -234
- package/src/color-picker/index.ts +0 -1
- package/src/combobox/_examples/combobox.async.example.ts +0 -85
- package/src/combobox/_examples/combobox.empty-state.example.ts +0 -36
- package/src/combobox/_examples/combobox.example.ts +0 -36
- package/src/combobox/_examples/combobox.free-text.example.ts +0 -42
- package/src/combobox/_examples/combobox.usage.example.ts +0 -51
- package/src/combobox/_examples/combobox.with-icons.example.ts +0 -49
- package/src/combobox/_examples/index.ts +0 -8
- package/src/combobox/combobox.css +0 -101
- package/src/combobox/combobox.playground.ts +0 -90
- package/src/combobox/combobox.spec.ts +0 -111
- package/src/combobox/combobox.ts +0 -219
- package/src/combobox/index.ts +0 -6
- package/src/command-palette/_examples/command-palette.async.example.ts +0 -99
- package/src/command-palette/_examples/command-palette.dialog.example.ts +0 -90
- package/src/command-palette/_examples/command-palette.example.ts +0 -40
- package/src/command-palette/_examples/command-palette.fuzzy.example.ts +0 -54
- package/src/command-palette/_examples/command-palette.groups.example.ts +0 -55
- package/src/command-palette/_examples/command-palette.usage.example.ts +0 -49
- package/src/command-palette/_examples/index.ts +0 -8
- package/src/command-palette/command-palette.css +0 -234
- package/src/command-palette/command-palette.playground.ts +0 -119
- package/src/command-palette/command-palette.ts +0 -448
- package/src/command-palette/index.ts +0 -10
- package/src/confirm-popup/_examples/confirm-popup.destructive.example.ts +0 -72
- package/src/confirm-popup/_examples/confirm-popup.example.ts +0 -82
- package/src/confirm-popup/_examples/confirm-popup.placement.example.ts +0 -97
- package/src/confirm-popup/_examples/confirm-popup.usage.example.ts +0 -94
- package/src/confirm-popup/_examples/confirm-popup.with-message.example.ts +0 -76
- package/src/confirm-popup/_examples/index.ts +0 -7
- package/src/confirm-popup/confirm-popup.css +0 -47
- package/src/confirm-popup/confirm-popup.playground.ts +0 -109
- package/src/confirm-popup/confirm-popup.spec.ts +0 -209
- package/src/confirm-popup/confirm-popup.ts +0 -279
- package/src/confirm-popup/index.ts +0 -1
- package/src/date-picker/_examples/date-picker.disabled-dates.example.ts +0 -44
- package/src/date-picker/_examples/date-picker.example.ts +0 -38
- package/src/date-picker/_examples/date-picker.locale.example.ts +0 -50
- package/src/date-picker/_examples/date-picker.readonly.example.ts +0 -32
- package/src/date-picker/_examples/date-picker.usage.example.ts +0 -60
- package/src/date-picker/_examples/date-picker.with-min-max.example.ts +0 -47
- package/src/date-picker/_examples/index.ts +0 -8
- package/src/date-picker/date-picker.css +0 -61
- package/src/date-picker/date-picker.playground.ts +0 -79
- package/src/date-picker/date-picker.spec.ts +0 -71
- package/src/date-picker/date-picker.ts +0 -185
- package/src/date-picker/index.ts +0 -1
- package/src/dialog/_examples/dialog.confirmation.example.ts +0 -30
- package/src/dialog/_examples/dialog.default.example.ts +0 -30
- package/src/dialog/_examples/dialog.nested.example.ts +0 -86
- package/src/dialog/_examples/dialog.scrollable.example.ts +0 -30
- package/src/dialog/_examples/dialog.usage.example.ts +0 -57
- package/src/dialog/_examples/dialog.with-form.example.ts +0 -48
- package/src/dialog/_examples/index.ts +0 -8
- package/src/dialog/dialog.css +0 -56
- package/src/dialog/dialog.playground.ts +0 -136
- package/src/dialog/dialog.ts +0 -82
- package/src/dialog/index.ts +0 -1
- package/src/divider/_examples/divider.example.ts +0 -27
- package/src/divider/_examples/divider.sizes.example.ts +0 -33
- package/src/divider/_examples/divider.structural.example.ts +0 -55
- package/src/divider/_examples/divider.usage.example.ts +0 -48
- package/src/divider/_examples/divider.variants.example.ts +0 -33
- package/src/divider/_examples/divider.vertical.example.ts +0 -38
- package/src/divider/_examples/divider.with-content.example.ts +0 -38
- package/src/divider/_examples/index.ts +0 -9
- package/src/divider/divider.css +0 -93
- package/src/divider/divider.playground.ts +0 -97
- package/src/divider/divider.spec.ts +0 -207
- package/src/divider/divider.ts +0 -220
- package/src/divider/index.ts +0 -1
- package/src/drawer/_examples/drawer.example.ts +0 -30
- package/src/drawer/_examples/drawer.modal-vs-non-modal.example.ts +0 -27
- package/src/drawer/_examples/drawer.scrollable.example.ts +0 -30
- package/src/drawer/_examples/drawer.sides.example.ts +0 -32
- package/src/drawer/_examples/drawer.usage.example.ts +0 -56
- package/src/drawer/_examples/drawer.with-form.example.ts +0 -48
- package/src/drawer/_examples/index.ts +0 -8
- package/src/drawer/drawer.css +0 -130
- package/src/drawer/drawer.playground.ts +0 -107
- package/src/drawer/drawer.spec.ts +0 -216
- package/src/drawer/drawer.ts +0 -85
- package/src/drawer/index.ts +0 -1
- package/src/dropdown-menu/_examples/dropdown-menu.disabled.example.ts +0 -19
- package/src/dropdown-menu/_examples/dropdown-menu.example.ts +0 -20
- package/src/dropdown-menu/_examples/dropdown-menu.shortcuts.example.ts +0 -31
- package/src/dropdown-menu/_examples/dropdown-menu.sides.example.ts +0 -18
- package/src/dropdown-menu/_examples/dropdown-menu.usage.example.ts +0 -56
- package/src/dropdown-menu/_examples/dropdown-menu.with-icons.example.ts +0 -31
- package/src/dropdown-menu/_examples/dropdown-menu.with-separator.example.ts +0 -41
- package/src/dropdown-menu/_examples/index.ts +0 -9
- package/src/dropdown-menu/dropdown-menu.css +0 -108
- package/src/dropdown-menu/dropdown-menu.playground.ts +0 -109
- package/src/dropdown-menu/dropdown-menu.spec.ts +0 -5
- package/src/dropdown-menu/dropdown-menu.ts +0 -128
- package/src/dropdown-menu/index.ts +0 -1
- package/src/empty-state/_examples/empty-state.error.example.ts +0 -63
- package/src/empty-state/_examples/empty-state.example.ts +0 -59
- package/src/empty-state/_examples/empty-state.search.example.ts +0 -82
- package/src/empty-state/_examples/empty-state.sizes.example.ts +0 -76
- package/src/empty-state/_examples/empty-state.usage.example.ts +0 -66
- package/src/empty-state/_examples/empty-state.with-actions.example.ts +0 -68
- package/src/empty-state/_examples/index.ts +0 -8
- package/src/empty-state/empty-state.css +0 -114
- package/src/empty-state/empty-state.playground.ts +0 -87
- package/src/empty-state/empty-state.spec.ts +0 -211
- package/src/empty-state/empty-state.ts +0 -276
- package/src/empty-state/index.ts +0 -1
- package/src/example-components.ts +0 -396
- package/src/field/_examples/field.disabled.example.ts +0 -49
- package/src/field/_examples/field.example.ts +0 -51
- package/src/field/_examples/field.required.example.ts +0 -46
- package/src/field/_examples/field.with-error.example.ts +0 -73
- package/src/field/_examples/field.with-prefix-suffix.example.ts +0 -63
- package/src/field/_examples/index.ts +0 -7
- package/src/field/field.css +0 -138
- package/src/field/field.playground.ts +0 -108
- package/src/field/field.spec.ts +0 -132
- package/src/field/field.ts +0 -232
- package/src/field/field.usage.example.ts +0 -63
- package/src/field/index.ts +0 -7
- package/src/file-upload/_examples/file-upload.dropzone.example.ts +0 -32
- package/src/file-upload/_examples/file-upload.example.ts +0 -29
- package/src/file-upload/_examples/file-upload.image-preview.example.ts +0 -31
- package/src/file-upload/_examples/file-upload.multiple.example.ts +0 -23
- package/src/file-upload/_examples/file-upload.with-progress.example.ts +0 -59
- package/src/file-upload/_examples/index.ts +0 -7
- package/src/file-upload/file-upload.css +0 -207
- package/src/file-upload/file-upload.playground.ts +0 -84
- package/src/file-upload/file-upload.spec.ts +0 -94
- package/src/file-upload/file-upload.ts +0 -301
- package/src/file-upload/file-upload.usage.example.ts +0 -45
- package/src/file-upload/index.ts +0 -1
- package/src/form/_examples/form.async-submit.example.ts +0 -72
- package/src/form/_examples/form.compound.example.ts +0 -93
- package/src/form/_examples/form.example.ts +0 -70
- package/src/form/_examples/form.validation.example.ts +0 -67
- package/src/form/_examples/index.ts +0 -6
- package/src/form/form.css +0 -63
- package/src/form/form.playground.ts +0 -145
- package/src/form/form.spec.ts +0 -96
- package/src/form/form.ts +0 -216
- package/src/form/form.usage.example.ts +0 -63
- package/src/form/index.ts +0 -5
- package/src/icon/_examples/icon.gallery.example.ts +0 -199
- package/src/icon/_examples/icon.usage.example.ts +0 -46
- package/src/icon/_examples/index.ts +0 -4
- package/src/icon/icon.playground.ts +0 -63
- package/src/icon/index.ts +0 -5
- package/src/icon/lucide/icon-names.generated.ts +0 -1708
- package/src/icon/lucide/icon-names.ts +0 -18
- package/src/icon/lucide/index.ts +0 -2
- package/src/icon/lucide/provide-lucide-icons.ts +0 -96
- package/src/input/_examples/index.ts +0 -4
- package/src/input/_examples/input.color.example.ts +0 -33
- package/src/input/_examples/input.example.ts +0 -22
- package/src/input/index.ts +0 -1
- package/src/input/input.css +0 -70
- package/src/input/input.playground.ts +0 -79
- package/src/input/input.spec.ts +0 -98
- package/src/input/input.ts +0 -158
- package/src/input/input.usage.example.ts +0 -40
- package/src/input-group/_examples/index.ts +0 -7
- package/src/input-group/_examples/input-group.button.example.ts +0 -43
- package/src/input-group/_examples/input-group.example.ts +0 -39
- package/src/input-group/_examples/input-group.icon.example.ts +0 -49
- package/src/input-group/_examples/input-group.url.example.ts +0 -36
- package/src/input-group/_examples/input-group.variants.example.ts +0 -39
- package/src/input-group/index.ts +0 -1
- package/src/input-group/input-group.css +0 -125
- package/src/input-group/input-group.playground.ts +0 -90
- package/src/input-group/input-group.ts +0 -142
- package/src/input-group/input-group.usage.example.ts +0 -47
- package/src/input-mask/_examples/index.ts +0 -8
- package/src/input-mask/_examples/input-mask.credit-card.example.ts +0 -90
- package/src/input-mask/_examples/input-mask.custom-tokens.example.ts +0 -87
- package/src/input-mask/_examples/input-mask.date.example.ts +0 -61
- package/src/input-mask/_examples/input-mask.example.ts +0 -61
- package/src/input-mask/_examples/input-mask.usage.example.ts +0 -44
- package/src/input-mask/_examples/input-mask.validation.example.ts +0 -80
- package/src/input-mask/index.ts +0 -9
- package/src/input-mask/input-mask.css +0 -39
- package/src/input-mask/input-mask.playground.ts +0 -79
- package/src/input-mask/input-mask.ts +0 -130
- package/src/input-otp/_examples/index.ts +0 -8
- package/src/input-otp/_examples/input-otp.autosubmit.example.ts +0 -71
- package/src/input-otp/_examples/input-otp.example.ts +0 -47
- package/src/input-otp/_examples/input-otp.lengths.example.ts +0 -67
- package/src/input-otp/_examples/input-otp.masked.example.ts +0 -46
- package/src/input-otp/_examples/input-otp.reactive.example.ts +0 -58
- package/src/input-otp/_examples/input-otp.separator.example.ts +0 -49
- package/src/input-otp/index.ts +0 -1
- package/src/input-otp/input-otp.css +0 -87
- package/src/input-otp/input-otp.playground.ts +0 -107
- package/src/input-otp/input-otp.ts +0 -244
- package/src/input-otp/input-otp.usage.example.ts +0 -45
- package/src/kbd/_examples/index.ts +0 -6
- package/src/kbd/_examples/kbd.combo.example.ts +0 -24
- package/src/kbd/_examples/kbd.example.ts +0 -22
- package/src/kbd/_examples/kbd.in-tooltip.example.ts +0 -43
- package/src/kbd/_examples/kbd.sizes.example.ts +0 -31
- package/src/kbd/index.ts +0 -1
- package/src/kbd/kbd.css +0 -67
- package/src/kbd/kbd.playground.ts +0 -51
- package/src/kbd/kbd.spec.ts +0 -123
- package/src/kbd/kbd.ts +0 -123
- package/src/kbd/kbd.usage.example.ts +0 -38
- package/src/link/_examples/index.ts +0 -8
- package/src/link/_examples/link.disabled.example.ts +0 -23
- package/src/link/_examples/link.example.ts +0 -26
- package/src/link/_examples/link.external.example.ts +0 -33
- package/src/link/_examples/link.in-prose.example.ts +0 -36
- package/src/link/_examples/link.sizes.example.ts +0 -28
- package/src/link/_examples/link.variants.example.ts +0 -25
- package/src/link/index.ts +0 -1
- package/src/link/link.css +0 -104
- package/src/link/link.playground.ts +0 -98
- package/src/link/link.spec.ts +0 -146
- package/src/link/link.ts +0 -133
- package/src/link/link.usage.example.ts +0 -37
- package/src/list/_examples/index.ts +0 -7
- package/src/list/_examples/list.divided.example.ts +0 -32
- package/src/list/_examples/list.example.ts +0 -31
- package/src/list/_examples/list.interactive.example.ts +0 -51
- package/src/list/_examples/list.nav.example.ts +0 -44
- package/src/list/_examples/list.with-icons.example.ts +0 -97
- package/src/list/index.ts +0 -1
- package/src/list/list.css +0 -166
- package/src/list/list.playground.ts +0 -90
- package/src/list/list.spec.ts +0 -121
- package/src/list/list.ts +0 -227
- package/src/list/list.usage.example.ts +0 -45
- package/src/menubar/_examples/index.ts +0 -6
- package/src/menubar/_examples/menubar.disabled-item.example.ts +0 -23
- package/src/menubar/_examples/menubar.example.ts +0 -22
- package/src/menubar/_examples/menubar.with-shortcuts.example.ts +0 -33
- package/src/menubar/_examples/menubar.with-submenu.example.ts +0 -76
- package/src/menubar/index.ts +0 -1
- package/src/menubar/menubar.css +0 -62
- package/src/menubar/menubar.playground.ts +0 -96
- package/src/menubar/menubar.ts +0 -160
- package/src/menubar/menubar.usage.example.ts +0 -33
- package/src/number-input/_examples/index.ts +0 -7
- package/src/number-input/_examples/number-input.currency.example.ts +0 -35
- package/src/number-input/_examples/number-input.decimal.example.ts +0 -34
- package/src/number-input/_examples/number-input.example.ts +0 -24
- package/src/number-input/_examples/number-input.min-max.example.ts +0 -33
- package/src/number-input/_examples/number-input.with-stepper.example.ts +0 -45
- package/src/number-input/index.ts +0 -1
- package/src/number-input/number-input.css +0 -115
- package/src/number-input/number-input.playground.ts +0 -92
- package/src/number-input/number-input.spec.ts +0 -102
- package/src/number-input/number-input.ts +0 -212
- package/src/number-input/number-input.usage.example.ts +0 -73
- package/src/overlay/overlay.css +0 -32
- package/src/overlay-badge/_examples/index.ts +0 -7
- package/src/overlay-badge/_examples/overlay-badge.described.example.ts +0 -36
- package/src/overlay-badge/_examples/overlay-badge.dot.example.ts +0 -28
- package/src/overlay-badge/_examples/overlay-badge.example.ts +0 -34
- package/src/overlay-badge/_examples/overlay-badge.on-avatar.example.ts +0 -38
- package/src/overlay-badge/_examples/overlay-badge.positions.example.ts +0 -39
- package/src/overlay-badge/index.ts +0 -1
- package/src/overlay-badge/overlay-badge.css +0 -118
- package/src/overlay-badge/overlay-badge.playground.ts +0 -92
- package/src/overlay-badge/overlay-badge.spec.ts +0 -174
- package/src/overlay-badge/overlay-badge.ts +0 -232
- package/src/overlay-badge/overlay-badge.usage.example.ts +0 -44
- package/src/pagination/_examples/index.ts +0 -7
- package/src/pagination/_examples/pagination.boundaries.example.ts +0 -56
- package/src/pagination/_examples/pagination.compact.example.ts +0 -42
- package/src/pagination/_examples/pagination.example.ts +0 -55
- package/src/pagination/_examples/pagination.large.example.ts +0 -54
- package/src/pagination/_examples/pagination.with-info.example.ts +0 -49
- package/src/pagination/index.ts +0 -1
- package/src/pagination/pagination.css +0 -146
- package/src/pagination/pagination.playground.ts +0 -107
- package/src/pagination/pagination.spec.ts +0 -202
- package/src/pagination/pagination.ts +0 -432
- package/src/pagination/pagination.usage.example.ts +0 -50
- package/src/password-input/_examples/index.ts +0 -6
- package/src/password-input/_examples/password-input.example.ts +0 -24
- package/src/password-input/_examples/password-input.strength.example.ts +0 -45
- package/src/password-input/_examples/password-input.toggle.example.ts +0 -43
- package/src/password-input/_examples/password-input.with-rules.example.ts +0 -78
- package/src/password-input/index.ts +0 -1
- package/src/password-input/password-input.css +0 -155
- package/src/password-input/password-input.playground.ts +0 -81
- package/src/password-input/password-input.spec.ts +0 -129
- package/src/password-input/password-input.ts +0 -254
- package/src/password-input/password-input.usage.example.ts +0 -55
- package/src/playground-types.ts +0 -47
- package/src/popover/_examples/index.ts +0 -7
- package/src/popover/_examples/popover.cancellable.example.ts +0 -20
- package/src/popover/_examples/popover.example.ts +0 -20
- package/src/popover/_examples/popover.modal.example.ts +0 -22
- package/src/popover/_examples/popover.sides.example.ts +0 -37
- package/src/popover/_examples/popover.with-form.example.ts +0 -38
- package/src/popover/index.ts +0 -1
- package/src/popover/popover.css +0 -71
- package/src/popover/popover.playground.ts +0 -86
- package/src/popover/popover.spec.ts +0 -5
- package/src/popover/popover.ts +0 -94
- package/src/popover/popover.usage.example.ts +0 -48
- package/src/progress-bar/_examples/index.ts +0 -7
- package/src/progress-bar/_examples/progress-bar.example.ts +0 -22
- package/src/progress-bar/_examples/progress-bar.indeterminate.example.ts +0 -23
- package/src/progress-bar/_examples/progress-bar.sizes.example.ts +0 -29
- package/src/progress-bar/_examples/progress-bar.variants.example.ts +0 -30
- package/src/progress-bar/_examples/progress-bar.with-label.example.ts +0 -30
- package/src/progress-bar/index.ts +0 -1
- package/src/progress-bar/progress-bar.css +0 -113
- package/src/progress-bar/progress-bar.playground.ts +0 -87
- package/src/progress-bar/progress-bar.spec.ts +0 -233
- package/src/progress-bar/progress-bar.ts +0 -155
- package/src/progress-bar/progress-bar.usage.example.ts +0 -52
- package/src/public-api.ts +0 -61
- package/src/radio/_examples/index.ts +0 -6
- package/src/radio/_examples/radio.default.example.ts +0 -26
- package/src/radio/_examples/radio.disabled.example.ts +0 -26
- package/src/radio/_examples/radio.group.example.ts +0 -27
- package/src/radio/_examples/radio.inline.example.ts +0 -26
- package/src/radio/index.ts +0 -1
- package/src/radio/radio.css +0 -58
- package/src/radio/radio.playground.ts +0 -90
- package/src/radio/radio.ts +0 -143
- package/src/radio/radio.usage.example.ts +0 -54
- package/src/select/_examples/index.ts +0 -6
- package/src/select/_examples/select.default.example.ts +0 -26
- package/src/select/_examples/select.disabled.example.ts +0 -24
- package/src/select/_examples/select.grouped.example.ts +0 -37
- package/src/select/_examples/select.placeholder.example.ts +0 -26
- package/src/select/index.ts +0 -1
- package/src/select/select.css +0 -65
- package/src/select/select.playground.ts +0 -81
- package/src/select/select.ts +0 -176
- package/src/select/select.usage.example.ts +0 -64
- package/src/skeleton/_examples/index.ts +0 -6
- package/src/skeleton/_examples/skeleton.animations.example.ts +0 -52
- package/src/skeleton/_examples/skeleton.card.example.ts +0 -68
- package/src/skeleton/_examples/skeleton.example.ts +0 -24
- package/src/skeleton/_examples/skeleton.shapes.example.ts +0 -55
- package/src/skeleton/index.ts +0 -1
- package/src/skeleton/skeleton.css +0 -111
- package/src/skeleton/skeleton.playground.ts +0 -80
- package/src/skeleton/skeleton.spec.ts +0 -126
- package/src/skeleton/skeleton.ts +0 -155
- package/src/skeleton/skeleton.usage.example.ts +0 -49
- package/src/slider/_examples/index.ts +0 -7
- package/src/slider/_examples/slider.example.ts +0 -41
- package/src/slider/_examples/slider.formatted.example.ts +0 -53
- package/src/slider/_examples/slider.range.example.ts +0 -48
- package/src/slider/_examples/slider.vertical.example.ts +0 -48
- package/src/slider/_examples/slider.with-marks.example.ts +0 -46
- package/src/slider/index.ts +0 -1
- package/src/slider/slider.css +0 -172
- package/src/slider/slider.playground.ts +0 -88
- package/src/slider/slider.spec.ts +0 -139
- package/src/slider/slider.ts +0 -246
- package/src/slider/slider.usage.example.ts +0 -68
- package/src/speed-dial/_examples/index.ts +0 -7
- package/src/speed-dial/_examples/speed-dial.directions.example.ts +0 -85
- package/src/speed-dial/_examples/speed-dial.disabled.example.ts +0 -71
- package/src/speed-dial/_examples/speed-dial.example.ts +0 -48
- package/src/speed-dial/_examples/speed-dial.usage.example.ts +0 -59
- package/src/speed-dial/_examples/speed-dial.with-tooltips.example.ts +0 -65
- package/src/speed-dial/index.ts +0 -1
- package/src/speed-dial/speed-dial.css +0 -137
- package/src/speed-dial/speed-dial.playground.ts +0 -137
- package/src/speed-dial/speed-dial.spec.ts +0 -191
- package/src/speed-dial/speed-dial.ts +0 -257
- package/src/spinner/_examples/index.ts +0 -8
- package/src/spinner/_examples/spinner.animations.example.ts +0 -54
- package/src/spinner/_examples/spinner.example.ts +0 -26
- package/src/spinner/_examples/spinner.in-button.example.ts +0 -51
- package/src/spinner/_examples/spinner.sizes.example.ts +0 -31
- package/src/spinner/_examples/spinner.usage.example.ts +0 -45
- package/src/spinner/_examples/spinner.variants.example.ts +0 -34
- package/src/spinner/index.ts +0 -1
- package/src/spinner/spinner.css +0 -161
- package/src/spinner/spinner.playground.ts +0 -68
- package/src/spinner/spinner.spec.ts +0 -184
- package/src/spinner/spinner.ts +0 -185
- package/src/stepper/_examples/index.ts +0 -8
- package/src/stepper/_examples/stepper.example.ts +0 -62
- package/src/stepper/_examples/stepper.non-linear.example.ts +0 -63
- package/src/stepper/_examples/stepper.optional-step.example.ts +0 -62
- package/src/stepper/_examples/stepper.usage.example.ts +0 -73
- package/src/stepper/_examples/stepper.vertical.example.ts +0 -66
- package/src/stepper/_examples/stepper.with-error.example.ts +0 -63
- package/src/stepper/index.ts +0 -1
- package/src/stepper/stepper.css +0 -147
- package/src/stepper/stepper.playground.ts +0 -88
- package/src/stepper/stepper.spec.ts +0 -200
- package/src/stepper/stepper.ts +0 -242
- package/src/table/_examples/index.ts +0 -23
- package/src/table/_examples/table.column-pinning.example.ts +0 -55
- package/src/table/_examples/table.column-resize.example.ts +0 -49
- package/src/table/_examples/table.column-visibility.example.ts +0 -52
- package/src/table/_examples/table.density.example.ts +0 -71
- package/src/table/_examples/table.editable.example.ts +0 -85
- package/src/table/_examples/table.empty-and-error.example.ts +0 -112
- package/src/table/_examples/table.example.ts +0 -45
- package/src/table/_examples/table.export.example.ts +0 -82
- package/src/table/_examples/table.filterable.example.ts +0 -67
- package/src/table/_examples/table.grouping.example.ts +0 -63
- package/src/table/_examples/table.keyboard.example.ts +0 -115
- package/src/table/_examples/table.master-detail.example.ts +0 -102
- package/src/table/_examples/table.persistence.example.ts +0 -85
- package/src/table/_examples/table.playground.ts +0 -154
- package/src/table/_examples/table.row-pinning.example.ts +0 -71
- package/src/table/_examples/table.selection.example.ts +0 -67
- package/src/table/_examples/table.server-mode.example.ts +0 -120
- package/src/table/_examples/table.sortable.example.ts +0 -49
- package/src/table/_examples/table.theming.example.ts +0 -64
- package/src/table/_examples/table.usage.example.ts +0 -90
- package/src/table/_examples/table.virtualized.example.ts +0 -122
- package/src/table/index.ts +0 -11
- package/src/table/table-cell-editor-outlet.ts +0 -111
- package/src/table/table-editors/boolean-editor.ts +0 -71
- package/src/table/table-editors/date-editor.ts +0 -117
- package/src/table/table-editors/editors.spec.ts +0 -147
- package/src/table/table-editors/index.ts +0 -41
- package/src/table/table-editors/number-editor.ts +0 -89
- package/src/table/table-editors/select-editor.ts +0 -107
- package/src/table/table-editors/text-editor.ts +0 -82
- package/src/table/table-export.spec.ts +0 -33
- package/src/table/table-export.ts +0 -53
- package/src/table/table-filter-outlet.ts +0 -137
- package/src/table/table-filters/date-filter.ts +0 -122
- package/src/table/table-filters/filters.css +0 -53
- package/src/table/table-filters/filters.spec.ts +0 -277
- package/src/table/table-filters/index.ts +0 -11
- package/src/table/table-filters/number-filter.ts +0 -232
- package/src/table/table-filters/select-filter.ts +0 -129
- package/src/table/table-filters/text-filter.ts +0 -110
- package/src/table/table-pagination.spec.ts +0 -118
- package/src/table/table-pagination.ts +0 -191
- package/src/table/table-side-panel.spec.ts +0 -170
- package/src/table/table-side-panel.ts +0 -263
- package/src/table/table-status-bar.spec.ts +0 -78
- package/src/table/table-status-bar.ts +0 -70
- package/src/table/table-toolbar.spec.ts +0 -180
- package/src/table/table-toolbar.ts +0 -244
- package/src/table/table-virtual.spec.ts +0 -103
- package/src/table/table-virtual.ts +0 -180
- package/src/table/table.css +0 -468
- package/src/table/table.spec.ts +0 -175
- package/src/table/table.ts +0 -1009
- package/src/tabs/_examples/index.ts +0 -8
- package/src/tabs/_examples/tabs.controlled.example.ts +0 -59
- package/src/tabs/_examples/tabs.disabled.example.ts +0 -34
- package/src/tabs/_examples/tabs.example.ts +0 -34
- package/src/tabs/_examples/tabs.manual-activation.example.ts +0 -34
- package/src/tabs/_examples/tabs.usage.example.ts +0 -43
- package/src/tabs/_examples/tabs.vertical.example.ts +0 -33
- package/src/tabs/index.ts +0 -1
- package/src/tabs/tabs.css +0 -80
- package/src/tabs/tabs.playground.ts +0 -88
- package/src/tabs/tabs.spec.ts +0 -135
- package/src/tabs/tabs.ts +0 -204
- package/src/tag/_examples/index.ts +0 -9
- package/src/tag/_examples/tag.example.ts +0 -22
- package/src/tag/_examples/tag.list.example.ts +0 -38
- package/src/tag/_examples/tag.removable.example.ts +0 -39
- package/src/tag/_examples/tag.selectable.example.ts +0 -33
- package/src/tag/_examples/tag.sizes.example.ts +0 -25
- package/src/tag/_examples/tag.usage.example.ts +0 -62
- package/src/tag/_examples/tag.variants.example.ts +0 -29
- package/src/tag/index.ts +0 -1
- package/src/tag/tag.css +0 -167
- package/src/tag/tag.playground.ts +0 -63
- package/src/tag/tag.spec.ts +0 -153
- package/src/tag/tag.ts +0 -186
- package/src/test-setup.ts +0 -5
- package/src/textarea/_examples/index.ts +0 -8
- package/src/textarea/_examples/textarea.autoresize.example.ts +0 -37
- package/src/textarea/_examples/textarea.character-count.example.ts +0 -34
- package/src/textarea/_examples/textarea.example.ts +0 -22
- package/src/textarea/_examples/textarea.no-resize.example.ts +0 -28
- package/src/textarea/_examples/textarea.usage.example.ts +0 -50
- package/src/textarea/_examples/textarea.with-field.example.ts +0 -66
- package/src/textarea/index.ts +0 -1
- package/src/textarea/textarea.css +0 -117
- package/src/textarea/textarea.playground.ts +0 -70
- package/src/textarea/textarea.spec.ts +0 -161
- package/src/textarea/textarea.ts +0 -339
- package/src/time-picker/_examples/index.ts +0 -8
- package/src/time-picker/_examples/time-picker.12-hour.example.ts +0 -24
- package/src/time-picker/_examples/time-picker.example.ts +0 -24
- package/src/time-picker/_examples/time-picker.formatted.example.ts +0 -32
- package/src/time-picker/_examples/time-picker.range.example.ts +0 -54
- package/src/time-picker/_examples/time-picker.usage.example.ts +0 -53
- package/src/time-picker/_examples/time-picker.with-seconds.example.ts +0 -24
- package/src/time-picker/index.ts +0 -1
- package/src/time-picker/time-picker.css +0 -126
- package/src/time-picker/time-picker.playground.ts +0 -72
- package/src/time-picker/time-picker.spec.ts +0 -77
- package/src/time-picker/time-picker.ts +0 -207
- package/src/toast/_examples/index.ts +0 -7
- package/src/toast/_examples/toast.default.example.ts +0 -37
- package/src/toast/_examples/toast.dismissible.example.ts +0 -38
- package/src/toast/_examples/toast.usage.example.ts +0 -57
- package/src/toast/_examples/toast.variants.example.ts +0 -43
- package/src/toast/_examples/toast.with-action.example.ts +0 -46
- package/src/toast/index.ts +0 -1
- package/src/toast/toast.css +0 -115
- package/src/toast/toast.playground.ts +0 -61
- package/src/toast/toast.ts +0 -168
- package/src/toggle/_examples/index.ts +0 -7
- package/src/toggle/_examples/toggle.checked.example.ts +0 -20
- package/src/toggle/_examples/toggle.default.example.ts +0 -20
- package/src/toggle/_examples/toggle.disabled.example.ts +0 -26
- package/src/toggle/_examples/toggle.usage.example.ts +0 -51
- package/src/toggle/_examples/toggle.with-label.example.ts +0 -30
- package/src/toggle/index.ts +0 -1
- package/src/toggle/toggle.css +0 -123
- package/src/toggle/toggle.playground.ts +0 -65
- package/src/toggle/toggle.ts +0 -113
- package/src/tooltip/_examples/index.ts +0 -9
- package/src/tooltip/_examples/tooltip.delays.example.ts +0 -16
- package/src/tooltip/_examples/tooltip.disabled.example.ts +0 -16
- package/src/tooltip/_examples/tooltip.example.ts +0 -16
- package/src/tooltip/_examples/tooltip.group.example.ts +0 -20
- package/src/tooltip/_examples/tooltip.rich.example.ts +0 -19
- package/src/tooltip/_examples/tooltip.sides.example.ts +0 -18
- package/src/tooltip/_examples/tooltip.usage.example.ts +0 -50
- package/src/tooltip/index.ts +0 -1
- package/src/tooltip/tooltip.css +0 -61
- package/src/tooltip/tooltip.playground.ts +0 -79
- package/src/tooltip/tooltip.spec.ts +0 -5
- package/src/tooltip/tooltip.ts +0 -102
- package/src/tree-select/_examples/index.ts +0 -8
- package/src/tree-select/_examples/tree-select.disabled.example.ts +0 -106
- package/src/tree-select/_examples/tree-select.example.ts +0 -65
- package/src/tree-select/_examples/tree-select.expanded.example.ts +0 -72
- package/src/tree-select/_examples/tree-select.field.example.ts +0 -77
- package/src/tree-select/_examples/tree-select.multi.example.ts +0 -73
- package/src/tree-select/_examples/tree-select.usage.example.ts +0 -85
- package/src/tree-select/index.ts +0 -1
- package/src/tree-select/tree-select.css +0 -220
- package/src/tree-select/tree-select.playground.ts +0 -83
- package/src/tree-select/tree-select.ts +0 -348
- package/src/typography/_examples/index.ts +0 -9
- package/src/typography/_examples/typography.blockquote.example.ts +0 -34
- package/src/typography/_examples/typography.code.example.ts +0 -32
- package/src/typography/_examples/typography.example.ts +0 -42
- package/src/typography/_examples/typography.lead.example.ts +0 -37
- package/src/typography/_examples/typography.muted.example.ts +0 -27
- package/src/typography/_examples/typography.truncate.example.ts +0 -41
- package/src/typography/_examples/typography.usage.example.ts +0 -44
- package/src/typography/index.ts +0 -8
- package/src/typography/typography.playground.ts +0 -101
- package/src/typography/typography.spec.ts +0 -70
- package/src/typography/typography.ts +0 -105
- package/tsconfig.lib.json +0 -25
- package/tsconfig.lib.prod.json +0 -17
- package/tsconfig.spec.json +0 -16
- package/vite.config.ts +0 -33
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kouji-ui-components.mjs","sources":["../../../packages/components/src/accordion/accordion.ts","../../../packages/components/src/alert/alert.ts","../../../packages/components/src/avatar/avatar.ts","../../../packages/components/src/avatar/avatar-group.ts","../../../packages/components/src/badge/badge.ts","../../../packages/components/src/breadcrumb/breadcrumb.ts","../../../packages/components/src/button/button.ts","../../../packages/components/src/button-group/button-group.ts","../../../packages/components/src/calendar/calendar.ts","../../../packages/components/src/card/card.ts","../../../packages/components/src/carousel/carousel.ts","../../../packages/components/src/chat/chat.ts","../../../packages/components/src/checkbox/checkbox.ts","../../../packages/components/src/color-picker/color-picker.ts","../../../packages/components/src/combobox/combobox.ts","../../../packages/components/src/confirm-popup/confirm-popup.ts","../../../packages/components/src/date-picker/date-picker.ts","../../../packages/components/src/dialog/dialog.ts","../../../packages/components/src/drawer/drawer.ts","../../../packages/components/src/dropdown-menu/dropdown-menu.ts","../../../packages/components/src/empty-state/empty-state.ts","../../../packages/components/src/field/field.ts","../../../packages/components/src/file-upload/file-upload.ts","../../../packages/components/src/form/form.ts","../../../packages/components/src/icon/lucide/provide-lucide-icons.ts","../../../packages/components/src/icon/lucide/icon-names.generated.ts","../../../packages/components/src/icon/lucide/icon-names.ts","../../../packages/components/src/input/input.ts","../../../packages/components/src/icon/_examples/icon.gallery.example.ts","../../../packages/components/src/icon/_examples/icon.usage.example.ts","../../../packages/components/src/icon/_examples/index.ts","../../../packages/components/src/input-group/input-group.ts","../../../packages/components/src/input-mask/input-mask.ts","../../../packages/components/src/input-mask/_examples/input-mask.credit-card.example.ts","../../../packages/components/src/input-mask/_examples/input-mask.custom-tokens.example.ts","../../../packages/components/src/input-mask/_examples/input-mask.date.example.ts","../../../packages/components/src/input-mask/_examples/input-mask.example.ts","../../../packages/components/src/input-mask/_examples/input-mask.usage.example.ts","../../../packages/components/src/input-mask/_examples/input-mask.validation.example.ts","../../../packages/components/src/input-mask/_examples/index.ts","../../../packages/components/src/input-otp/input-otp.ts","../../../packages/components/src/kbd/kbd.ts","../../../packages/components/src/divider/divider.ts","../../../packages/components/src/link/link.ts","../../../packages/components/src/list/list.ts","../../../packages/components/src/menubar/menubar.ts","../../../packages/components/src/number-input/number-input.ts","../../../packages/components/src/overlay-badge/overlay-badge.ts","../../../packages/components/src/pagination/pagination.ts","../../../packages/components/src/password-input/password-input.ts","../../../packages/components/src/popover/popover.ts","../../../packages/components/src/progress-bar/progress-bar.ts","../../../packages/components/src/radio/radio.ts","../../../packages/components/src/select/select.ts","../../../packages/components/src/skeleton/skeleton.ts","../../../packages/components/src/slider/slider.ts","../../../packages/components/src/speed-dial/speed-dial.ts","../../../packages/components/src/spinner/spinner.ts","../../../packages/components/src/stepper/stepper.ts","../../../packages/components/src/table/table-virtual.ts","../../../packages/components/src/table/table-editors/text-editor.ts","../../../packages/components/src/table/table-editors/number-editor.ts","../../../packages/components/src/table/table-editors/date-editor.ts","../../../packages/components/src/table/table-editors/select-editor.ts","../../../packages/components/src/toggle/toggle.ts","../../../packages/components/src/table/table-editors/boolean-editor.ts","../../../packages/components/src/table/table-editors/index.ts","../../../packages/components/src/table/table-filters/text-filter.ts","../../../packages/components/src/table/table-filters/number-filter.ts","../../../packages/components/src/table/table-filters/date-filter.ts","../../../packages/components/src/table/table-filters/select-filter.ts","../../../packages/components/src/table/table-cell-editor-outlet.ts","../../../packages/components/src/table/table-filter-outlet.ts","../../../packages/components/src/table/table.ts","../../../packages/components/src/table/table-toolbar.ts","../../../packages/components/src/table/table-pagination.ts","../../../packages/components/src/table/table-side-panel.ts","../../../packages/components/src/table/table-status-bar.ts","../../../packages/components/src/table/table-export.ts","../../../packages/components/src/tabs/tabs.ts","../../../packages/components/src/tag/tag.ts","../../../packages/components/src/textarea/textarea.ts","../../../packages/components/src/time-picker/time-picker.ts","../../../packages/components/src/toast/toast.ts","../../../packages/components/src/tooltip/tooltip.ts","../../../packages/components/src/cascade-select/cascade-select.ts","../../../packages/components/src/command-palette/command-palette.ts","../../../packages/components/src/tree-select/tree-select.ts","../../../packages/components/src/typography/index.ts","../../../packages/components/src/public-api.ts","../../../packages/components/src/kouji-ui-components.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, ViewEncapsulation, input } from '@angular/core';\nimport { KjAccordion, KjAccordionItem, KjAccordionTrigger, KjAccordionContent } from '@kouji-ui/core';\n\n/**\n * Root accordion container.\n *\n * Applies `KjAccordion` via `hostDirectives` so the `KJ_ACCORDION` provider lives\n * on the `<kj-accordion>` host element — projected `<kj-accordion-item>` children\n * find it in their element-injector chain.\n *\n * @doc-example Default\n * The default playground — single-open accordion with two items.\n * @doc-file accordion.default.example.ts\n * @doc-example Usage\n * The common shape: labelled items, controlled value, and arrow-key\n * navigation. Use this as the copy-paste starting point.\n * @doc-file accordion.usage.example.ts\n * @doc-example Multiple open\n * `type=\"multiple\"` lets users expand several panels at once. Bind an array\n * of open ids to `[(value)]`.\n * @doc-file accordion.multiple.example.ts\n * @doc-example Disabled item\n * Mark an item `disabled` to skip it in tab order and arrow navigation.\n * @doc-file accordion.disabled.example.ts\n * @doc-example Rich content\n * Project anything inside `<kj-accordion-content>` — paragraphs, lists, forms.\n * @doc-file accordion.rich-content.example.ts\n * @doc-example Arrow navigation\n * `arrowNavigation` enables APG roving focus across triggers.\n * @doc-file accordion.arrow-nav.example.ts\n * @doc-example Controlled value\n * Two-way bind `[(value)]` to drive open state from a signal or form.\n * @doc-file accordion.value.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Toggles the focused trigger's panel\n * Tab — Moves focus to the next trigger (default) or out of the accordion (roving mode)\n * ArrowDown — When `arrowNavigation`, moves focus to the next trigger (clamps at the end)\n * ArrowUp — When `arrowNavigation`, moves focus to the previous trigger (clamps at the start)\n * Home — When `arrowNavigation`, moves focus to the first trigger\n * End — When `arrowNavigation`, moves focus to the last trigger\n *\n * @doc-aria\n * aria-expanded — Reflected on each trigger; flips with the panel's open state\n * aria-controls — Trigger references its panel id\n * aria-labelledby — Panel references its trigger id\n * aria-disabled — Reflected when an item is disabled\n * role — Panel host carries `region` so it's a navigable landmark\n *\n * @doc-css-var\n * --kj-accordion-bg — Background fill of the accordion shell. Inherits --kj-bg-body.\n * --kj-accordion-border — Border color around the shell and between items. Inherits --kj-border-default.\n * --kj-accordion-radius — Outer corner radius. Inherits --kj-radius-box.\n *\n * @doc-touch\n * Triggers render real `<button>` elements that span the row width — easily\n * clears WCAG 2.5.5 ≥ 44×44 on the default size.\n *\n * @doc-a11y\n * Implements the WAI-ARIA APG Accordion pattern. Triggers are real\n * `<button>` hosts (Enter / Space activation, native focus ring). Roving\n * focus is opt-in via `arrowNavigation`; without it Tab walks through every\n * trigger sequentially.\n *\n * @doc-related card,tabs,dropdown-menu\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name accordion\n * @doc-description Themed accordion for collapsible content sections with single or multi-open panels and keyboard navigation.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-accordion',\n standalone: true,\n hostDirectives: [{\n directive: KjAccordion,\n inputs: ['kjType: type', 'kjValue: value', 'kjArrowNavigation: arrowNavigation'],\n outputs: ['kjValueChange: valueChange'],\n }],\n template: `<ng-content />`,\n styleUrl: './accordion.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-accordion' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAccordionComponent {}\n\n/**\n * Click target that toggles the parent item.\n * @doc\n * @doc-name accordion\n */\n@Component({\n selector: 'kj-accordion-trigger',\n standalone: true,\n imports: [KjAccordionTrigger],\n template: `<button type=\"button\" kjAccordionTrigger class=\"kj-accordion-trigger\" [disabled]=\"disabled()\" [attr.aria-disabled]=\"disabled() ? 'true' : null\"><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAccordionTriggerComponent {\n readonly disabled = input(false);\n}\n\n/**\n * Single accordion item. Bind a unique `value`.\n *\n * When `label` is provided the trigger is rendered internally — users only need\n * to project `<kj-accordion-content>`. When `label` is omitted, project a\n * `<kj-accordion-trigger>` manually for full control.\n * @doc\n * @doc-name accordion\n */\n@Component({\n selector: 'kj-accordion-item',\n standalone: true,\n hostDirectives: [{\n directive: KjAccordionItem,\n inputs: ['kjItemValue: value', 'kjItemDisabled: disabled'],\n }],\n imports: [KjAccordionTriggerComponent],\n template: `\n @if (label()) {\n <kj-accordion-trigger [disabled]=\"disabled()\">{{ label() }}</kj-accordion-trigger>\n }\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-accordion-item' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAccordionItemComponent {\n readonly label = input<string | undefined>(undefined);\n readonly disabled = input(false);\n}\n\n/**\n * Body shown when the parent item is expanded.\n * @doc\n * @doc-name accordion\n */\n@Component({\n selector: 'kj-accordion-content',\n standalone: true,\n imports: [KjAccordionContent],\n template: `<div kjAccordionContent class=\"kj-accordion-content\"><ng-content /></div>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAccordionContentComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport {\n KjAlert,\n KjAlertActions,\n KjAlertDescription,\n KjAlertDismiss,\n KjAlertIcon,\n KjAlertTitle,\n KjIconDirective,\n} from '@kouji-ui/core';\nimport type { KjAlertMode } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the `KjAlert` directive family. Provides the\n * persistent in-flow notification surface (severity-aware chrome, severity\n * border accent, banner mode, dismiss button). Visibility is consumer-managed\n * — bind a signal via `@if` and clear it from `(kjAlertDismissed)`.\n *\n * Re-exposes `KjAlert`'s contract directly (variant, size, mode, static, role)\n * with no new wrapper-layer inputs. Severity defaults: `error` → assertive,\n * others → polite, `kjAlertStatic` → static region.\n *\n * @example\n * ```html\n * <kj-alert kjVariant=\"error\" (kjAlertDismissed)=\"show.set(false)\">\n * <kj-alert-icon />\n * <kj-alert-title>Could not save draft</kj-alert-title>\n * <kj-alert-description>Network request timed out — retry?</kj-alert-description>\n * <kj-alert-actions>\n * <kj-button (click)=\"retry()\">Retry</kj-button>\n * </kj-alert-actions>\n * <kj-alert-dismiss />\n * </kj-alert>\n * ```\n * @doc-example Default\n * The default playground — `info` severity with icon, title, and description.\n * @doc-file alert.example.ts\n * @doc-example Usage\n * A walkthrough of the common shapes — severity variants, dismissible flow,\n * and an action button row. Use this as the copy-paste starting point.\n * @doc-file alert.usage.example.ts\n * @doc-example Variants\n * Info / success / warning / error — severity drives the stripe and icon tint.\n * @doc-file alert.variants.example.ts\n * @doc-example Dismissible\n * Project `<kj-alert-dismiss>` and listen to `(kjAlertDismissed)` to clear.\n * @doc-file alert.dismissible.example.ts\n * @doc-example With actions\n * Drop `<kj-button>`s inside `<kj-alert-actions>` for retry / view-details flows.\n * @doc-file alert.with-actions.example.ts\n * @doc-example Static banner\n * `kjAlertStatic` removes the live region — use for page-persistent notices.\n * @doc-file alert.banner.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus through interactive children (actions, dismiss)\n * Enter|Space — Activates the focused dismiss button or action\n *\n * @doc-aria\n * role — `alert` for error severity (assertive), `status` otherwise (polite); `kjAlertStatic` switches to `region`\n * aria-live — `assertive` for error, `polite` for info/success/warning\n * aria-labelledby — Wired to the title id when `<kj-alert-title>` is projected\n * aria-describedby — Wired to the description id when `<kj-alert-description>` is projected\n * data-variant — Mirrors the severity for theme/scope hooks\n *\n * @doc-touch\n * The dismiss button defaults to `size=\"icon\"` (44×44) so it meets WCAG 2.5.5\n * out of the box. Action buttons inherit `<kj-button>` size rules.\n *\n * @doc-a11y\n * Severity drives the live region politeness so screen readers announce\n * errors immediately but don't interrupt for routine info. Dismiss is a\n * real `<button>` with `aria-label=\"Dismiss\"`; consumers can swap the\n * label via `kjAlertDismissLabel`. Decorative icons are `aria-hidden=\"true\"`.\n *\n * @doc-related toast,dialog,banner\n *\n * @doc-css-var\n * --kj-alert-bg — Background fill. Defaults to --kj-bg-body.\n * --kj-alert-fg — Foreground (body text) color. Defaults to --kj-fg-default.\n * --kj-alert-border-color — Outer border color. Defaults to --kj-border-default.\n * --kj-alert-accent — Severity stripe + icon + title color. Variants set this per severity.\n * --kj-alert-radius — Corner radius. Inherits --kj-radius-box.\n * --kj-alert-padding-x — Horizontal padding. Sizes override.\n * --kj-alert-padding-y — Vertical padding. Sizes override.\n * --kj-alert-gap — Gap between icon, body, and actions.\n * --kj-alert-font-size — Body font size. Sizes override.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name alert\n * @doc-description Themed in-flow notification with severity variants, optional dismiss button, and action slots.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-alert',\n standalone: true,\n hostDirectives: [\n {\n directive: KjAlert,\n inputs: [\n 'kjVariant',\n 'kjSize',\n 'kjAlertMode',\n 'kjAlertStatic',\n 'kjAlertRole',\n ],\n outputs: ['kjAlertDismissed'],\n },\n ],\n template: `\n <ng-content select=\"[kjAlertIcon],kj-alert-icon\" />\n <div class=\"kj-alert__body\">\n <ng-content select=\"[kjAlertTitle],kj-alert-title\" />\n <ng-content select=\"[kjAlertDescription],kj-alert-description\" />\n <ng-content />\n </div>\n <ng-content select=\"[kjAlertActions],kj-alert-actions\" />\n <ng-content select=\"[kjAlertDismiss],kj-alert-dismiss\" />\n `,\n styleUrl: './alert.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-alert' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAlertComponent {\n // Inputs are forwarded via `hostDirectives.inputs` above. Re-declared here\n // only to surface them in the docs extractor (which inspects the wrapper\n // class). The actual signal lives on the composed directive.\n readonly kjVariant = input<string>('info');\n readonly kjSize = input<string>('md');\n readonly kjAlertMode = input<KjAlertMode | undefined>(undefined);\n readonly kjAlertStatic = input(false, { transform: booleanAttribute });\n readonly kjAlertRole = input<string | undefined>(undefined);\n}\n\n/**\n * Decorative icon slot inside `<kj-alert>`. Wraps `KjAlertIcon` so it picks\n * up `aria-hidden=\"true\"` and `data-variant` from the parent alert context.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name alert\n */\n@Component({\n selector: 'kj-alert-icon',\n standalone: true,\n hostDirectives: [KjAlertIcon],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-alert__icon' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAlertIconComponent {}\n\n/**\n * Title for the alert. Apply to a heading element (or rely on the wrapper —\n * the wrapper defaults to a `<strong>`-styled element via CSS, but consumers\n * SHOULD use `<h3 kjAlertTitle>` when the alert lives in a content region).\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name alert\n */\n@Component({\n selector: 'kj-alert-title',\n standalone: true,\n hostDirectives: [KjAlertTitle],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-alert__title' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAlertTitleComponent {}\n\n/**\n * Description body for the alert. Wires `aria-describedby` via `KjAlertDescription`.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name alert\n */\n@Component({\n selector: 'kj-alert-description',\n standalone: true,\n hostDirectives: [KjAlertDescription],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-alert__description' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAlertDescriptionComponent {}\n\n/**\n * Container for action buttons (Retry, View details, …). Sets `role=\"group\"`\n * with an overridable `aria-label`. Compose `<kj-button>` instances inside.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name alert\n */\n@Component({\n selector: 'kj-alert-actions',\n standalone: true,\n hostDirectives: [{ directive: KjAlertActions, inputs: ['kjAlertActionsLabel'] }],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-alert__actions' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAlertActionsComponent {\n readonly kjAlertActionsLabel = input<string>('Alert actions');\n}\n\n/**\n * Dismiss button. Renders a real `<button kjAlertDismiss>` so the directive\n * picks up the full `KjButton` chrome (focus ring, ARIA-disabled). Default\n * content is `×`; override via projected content. Place inside `<kj-alert>`.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name alert\n */\n@Component({\n selector: 'kj-alert-dismiss',\n standalone: true,\n imports: [KjAlertDismiss, KjIconDirective],\n template: `<button\n type=\"button\"\n kjAlertDismiss\n class=\"kj-alert__dismiss\"\n [kjAlertDismissLabel]=\"kjAlertDismissLabel()\"\n [kjAlertDismissVariant]=\"kjAlertDismissVariant()\"\n [kjAlertDismissSize]=\"kjAlertDismissSize()\"\n ><ng-content><i kjIcon=\"x\"></i></ng-content></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAlertDismissComponent {\n readonly kjAlertDismissLabel = input<string>('Dismiss');\n readonly kjAlertDismissVariant = input<string>('ghost');\n readonly kjAlertDismissSize = input<string>('icon');\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, computed, inject, input, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { KjAvatar, KjAvatarImage, KjAvatarFallback, KJ_AVATAR_GROUP, type KjAvatarShape } from '@kouji-ui/core';\n\ntype KjAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Avatar component. Renders an image when `src` is provided; otherwise (or when\n * the image fails to load) shows the `content` input. `content` accepts a plain\n * string or a `TemplateRef` for richer markup (icon, sub-badge, etc.).\n *\n * @doc-example Default\n * The default playground — initials avatar at the default size.\n * @doc-file avatar.default.example.ts\n * @doc-example Usage\n * The common shapes — image, initials fallback, sized, and a rounded square.\n * Use this as the copy-paste starting point.\n * @doc-file avatar.usage.example.ts\n * @doc-example Sizes\n * xs / sm / md / lg / xl — `md` is the default.\n * @doc-file avatar.sizes.example.ts\n * @doc-example With image\n * Bind `src` and `alt` — the alt also surfaces as a native hover tooltip.\n * @doc-file avatar.with-image.example.ts\n * @doc-example Initials fallback\n * Project text into `content` for a graceful fallback when `src` is missing.\n * @doc-file avatar.initials.example.ts\n * @doc-example Shapes\n * `circle` (default) or `rounded` — pick the silhouette that matches the surface.\n * @doc-file avatar.shapes.example.ts\n *\n * @doc-aria\n * alt — Forwarded to the inner `<img>`; falls back to empty string when omitted\n * title — Mirrors `alt` so hovering surfaces a native tooltip\n * data-size — Mirrors the resolved size for theme/scope hooks\n * data-shape — Mirrors the resolved shape for theme/scope hooks\n *\n * @doc-a11y\n * When `src` is set the inner `<img>` carries the user-supplied `alt`; an\n * empty alt (the default) marks it decorative so AT skips it — pair with a\n * visible name elsewhere. The fallback element is a `<span>` so it reads as\n * plain text rather than an image.\n *\n * @doc-related avatar-group,badge,icon\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name avatar\n */\n@Component({\n selector: 'kj-avatar',\n standalone: true,\n hostDirectives: [KjAvatar],\n imports: [KjAvatarImage, KjAvatarFallback, NgTemplateOutlet],\n template: `\n @if (src(); as srcVal) {\n <img kjAvatarImage class=\"kj-avatar-image\" [src]=\"srcVal\" [alt]=\"alt() ?? ''\" />\n }\n <span kjAvatarFallback class=\"kj-avatar-fallback\">\n @if (isTemplate(content())) {\n <ng-container *ngTemplateOutlet=\"$any(content())\"></ng-container>\n } @else {\n {{ content() }}\n }\n </span>\n `,\n styleUrl: './avatar.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-avatar',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-shape]': 'resolvedShape()',\n // Mirror `alt` to `title` so hovering the avatar shows a native tooltip.\n // `alt` alone only surfaces to screen readers / fallback rendering.\n '[attr.title]': 'alt()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAvatarComponent {\n /**\n * Optional `KjAvatarGroup` context. Avatars rendered inside a\n * `<kj-avatar-group>` inherit `kjSize` / `kjShape` from the group when\n * their own inputs are unset — matching the `@doc-example Sizes` claim\n * that group size \"cascades onto every projected `<kj-avatar>`\".\n */\n private readonly group = inject(KJ_AVATAR_GROUP, { optional: true });\n\n readonly src = input<string | undefined>(undefined);\n readonly alt = input<string | undefined>(undefined);\n /** Content shown when there is no `src`, or as a fallback if the image fails. */\n readonly content = input<string | TemplateRef<unknown>>('');\n /**\n * Explicit avatar size. Leave unset to inherit from a parent\n * `<kj-avatar-group kjSize=\"...\">`; falls back to `'md'` when neither\n * is set.\n */\n readonly size = input<KjAvatarSize | undefined>(undefined);\n /**\n * Explicit avatar shape. Leave unset to inherit from a parent\n * `<kj-avatar-group kjShape=\"...\">`; falls back to `'circle'` when neither\n * is set.\n */\n readonly shape = input<KjAvatarShape | undefined>(undefined);\n\n /** Effective size — explicit input wins, then group context, then `'md'`. */\n protected readonly resolvedSize = computed<KjAvatarSize>(() => {\n const own = this.size();\n if (own) return own;\n const fromGroup = this.group?.size() as KjAvatarSize | undefined;\n return fromGroup ?? 'md';\n });\n\n /** Effective shape — explicit input wins, then group context, then `'circle'`. */\n protected readonly resolvedShape = computed<KjAvatarShape>(() => {\n const own = this.shape();\n if (own) return own;\n return this.group?.shape() ?? 'circle';\n });\n\n protected isTemplate(v: unknown): v is TemplateRef<unknown> {\n return v instanceof TemplateRef;\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { KjAvatarGroup, KJ_AVATAR_GROUP, type KjAvatarGroupAriaLabelFormat, type KjAvatarShape } from '@kouji-ui/core';\nimport { KjAvatarComponent } from './avatar';\n\n/**\n * Avatar group wrapper. Stacks projected `<kj-avatar>` children with a\n * count-aware `aria-label`, an overflow chip when `kjMax` is exceeded, and\n * RTL-aware z-index ordering — all handled by the composed `KjAvatarGroup`\n * core directive. The wrapper supplies the chip element and the host\n * `<ng-content/>` slot.\n *\n * The overflow chip is a regular `<kj-avatar>` rendering `'+N'` text; it is\n * `aria-hidden` because the group's count-aware label already conveys\n * totality (e.g. `\"3 of 8 collaborators\"`), so exposing the chip again would\n * duplicate the announcement.\n *\n * @doc-example Default\n * The default playground — five stacked avatars with the group's defaults.\n * @doc-file avatar-group.example.ts\n * @doc-example Usage\n * The common shape: a small face-pile with an overflow chip, accessible label,\n * and a list-mode variant for documents-shared screens.\n * @doc-file avatar-group.usage.example.ts\n * @doc-example Overflow\n * `kjMax` caps visible avatars; the remainder collapses into a \"+N\" chip.\n * @doc-file avatar-group.overflow.example.ts\n * @doc-example Sizes\n * Group `kjSize` cascades onto every projected `<kj-avatar>` for a uniform pile.\n * @doc-file avatar-group.sizes.example.ts\n * @doc-example Shapes\n * Group `kjShape` cascades to children; the +N chip mirrors it for a consistent silhouette.\n * @doc-file avatar-group.shapes.example.ts\n * @doc-example List\n * `kjRole=\"list\"` switches to a list landmark — use for \"shared by\" rows in docs UIs.\n * @doc-file avatar-group.list.example.ts\n *\n * @doc-aria\n * aria-label — Count-aware label like \"3 of 8 collaborators\"; override via `kjAriaLabelOverride`\n * role — Defaults to `img` (face-pile); set `kjRole=\"list\"` for a true list landmark\n * aria-hidden — Forced on the +N chip so the count isn't re-announced\n *\n * @doc-touch\n * Stacked avatars are decorative — they aren't tab stops. Pair the group\n * with an interactive trigger (button/link) sized ≥ 44×44 when clicking is\n * meaningful (e.g. opens a collaborator dialog).\n *\n * @doc-a11y\n * The face-pile is an `img` landmark with a count-aware accessible name so\n * AT users hear \"3 of 8 collaborators\" rather than every initial. Switch to\n * `role=\"list\"` whenever the order/identity of each face matters\n * semantically. The overflow chip is always `aria-hidden` because the\n * group's name already conveys totality.\n *\n * @doc-related avatar,badge,tag\n *\n * @doc-css-var\n * --kj-avatar-size — Avatar diameter. Sizes (xs/sm/md/lg/xl) override.\n * --kj-avatar-bg — Avatar background. Defaults to --kj-bg-field; the +N chip inherits this too.\n * --kj-avatar-fg — Avatar foreground (initials, fallback glyph). Defaults to --kj-fg-default.\n * --kj-avatar-radius — Corner radius. `circle` shape pins it to 9999px; `rounded` swaps to --kj-radius-box.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name avatar\n * @doc-description Themed avatar facepile that stacks avatars with an overflow chip and an accessible count label.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-avatar-group',\n standalone: true,\n hostDirectives: [\n {\n directive: KjAvatarGroup,\n inputs: [\n 'kjMax',\n 'kjTotal',\n 'kjSize',\n 'kjShape',\n 'kjAriaLabel',\n 'kjAriaLabelFormat',\n 'kjRole',\n 'kjAriaLabelOverride',\n ],\n },\n ],\n imports: [KjAvatarComponent],\n template: `\n <ng-content />\n @if (overflowCount() > 0) {\n <kj-avatar\n class=\"kj-avatar-group-overflow\"\n aria-hidden=\"true\"\n [content]=\"overflowLabel()\"\n [shape]=\"chipShape()\"\n />\n }\n `,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-avatar-group',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjAvatarGroupComponent {\n /**\n * Read-only handle to the composed `KjAvatarGroup` directive. The directive\n * `provide`s itself under `KJ_AVATAR_GROUP`, so injecting the token returns\n * the same instance and gives us access to `overflowCount`, `shape`, etc.\n */\n private readonly group = inject(KJ_AVATAR_GROUP);\n\n protected readonly overflowCount = this.group.overflowCount;\n\n protected readonly overflowLabel = computed(() => `+${this.overflowCount()}`);\n\n /**\n * Chip shape mirrors the group's default shape so the chip visually\n * matches the avatars. `<kj-avatar>`'s own `shape` default is `'circle'`,\n * which is also the group's default — so a missing group shape cleanly\n * collapses to `'circle'`.\n */\n protected readonly chipShape = computed<'circle' | 'rounded'>(\n () => (this.group.shape() as KjAvatarShape | undefined) ?? 'circle',\n );\n}\n\nexport type { KjAvatarGroupAriaLabelFormat };\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, booleanAttribute, input } from '@angular/core';\nimport { KjBadge, KjBadgeVariant } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjBadge` directive.\n *\n * @doc-example Default\n * The default playground — a single badge with the default variant.\n * @doc-file badge.default.example.ts\n * @doc-example Usage\n * The common shapes — status pill, count badge, and an icon-prefixed tag.\n * Use this as the copy-paste starting point.\n * @doc-file badge.usage.example.ts\n * @doc-example Variants\n * default / secondary / destructive / outline — pick the visual weight.\n * @doc-file badge.variants.example.ts\n * @doc-example Sizes\n * xs / sm / md / lg — `md` is the default. Inline-text exception applies.\n * @doc-file badge.sizes.example.ts\n * @doc-example With icon\n * Project an icon before the label for status pills or sender chips.\n * @doc-file badge.with-icon.example.ts\n * @doc-example With dot\n * Set `dot` to render a leading status indicator; tint it via\n * `--kj-badge-dot-color` for state pills (active / pending / archived).\n * @doc-file badge.with-dot.example.ts\n *\n * @doc-aria\n * role — Decorative by default; promote to `status` for live counts and pair with `aria-live=\"polite\"`\n * data-size — Mirrors the resolved size for theme/scope hooks\n *\n * @doc-touch\n * Badges are inline-text decorations, not tap targets. When wired to an\n * interactive trigger (filter chip, removable tag), wrap with a real\n * `<button>` and size it to ≥ 44×44 (WCAG 2.5.5).\n *\n * @doc-a11y\n * Renders a `<span>` so the badge reads as part of the surrounding text.\n * For live count updates (notifications, unread totals) wrap the host with\n * `role=\"status\"` + `aria-live=\"polite\"` so AT announces changes without\n * stealing focus.\n *\n * @doc-related tag,overlay-badge,avatar\n *\n * @doc-css-var\n * --kj-badge-bg — Background fill. Variant rules set this; override to brand-paint a one-off.\n * --kj-badge-fg — Foreground (text + icon) color. Resolved per variant.\n * --kj-badge-border-color — Border color. Outline variant sets this; default is transparent.\n * --kj-badge-radius — Corner radius. Inherits --kj-radius-selector.\n * --kj-badge-padding-x — Horizontal padding. Sizes override.\n * --kj-badge-padding-y — Vertical padding. Sizes override.\n * --kj-badge-font-size — Font size. Sizes override.\n * --kj-badge-dot-size — Diameter of the leading dot (when `dot` is set).\n * --kj-badge-dot-color — Fill of the leading dot. Defaults to currentColor.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name badge\n * @doc-description Themed inline label for status, counts, or category tags with variant and size presets.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-badge',\n standalone: true,\n imports: [KjBadge],\n template: `\n <span\n kjBadge\n class=\"kj-badge\"\n [kjBadgeVariant]=\"variant()\"\n [kjBadgeDot]=\"dot()\"\n [attr.data-size]=\"size()\"\n >\n <ng-content />\n </span>\n `,\n styleUrl: './badge.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBadgeComponent {\n readonly variant = input<KjBadgeVariant>('default');\n readonly size = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n readonly dot = input(false, { transform: booleanAttribute });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport {\n KjBreadcrumb,\n KjBreadcrumbList,\n KjBreadcrumbItem,\n KjBreadcrumbCurrent,\n KjBreadcrumbSeparator,\n KjBreadcrumbEllipsis,\n KjLink,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjBreadcrumb` directive — root of the\n * breadcrumb compound. Hosts a `<nav aria-label=\"Breadcrumb\">` (selector\n * restriction on the directive) by composing `KjBreadcrumb` via\n * `hostDirectives`. Compose with `<kj-breadcrumb-list>`,\n * `<kj-breadcrumb-item>`, `<kj-breadcrumb-link>`,\n * `<kj-breadcrumb-current>`, `<kj-breadcrumb-separator>`, and\n * `<kj-breadcrumb-ellipsis>` to build the trail.\n *\n * @example\n * ```html\n * <kj-breadcrumb>\n * <kj-breadcrumb-list>\n * <kj-breadcrumb-item><kj-breadcrumb-link kjHref=\"/\">Home</kj-breadcrumb-link></kj-breadcrumb-item>\n * <kj-breadcrumb-item><kj-breadcrumb-link kjHref=\"/library\">Library</kj-breadcrumb-link></kj-breadcrumb-item>\n * <kj-breadcrumb-item><kj-breadcrumb-current>Data</kj-breadcrumb-current></kj-breadcrumb-item>\n * </kj-breadcrumb-list>\n * </kj-breadcrumb>\n * ```\n *\n * @doc-example Default\n * The default playground — three-crumb trail with auto `/` separator.\n * @doc-file breadcrumb.example.ts\n * @doc-example Usage\n * The common shape — Home → section → page with a current cell. Use this as\n * the copy-paste starting point.\n * @doc-file breadcrumb.usage.example.ts\n * @doc-example With icons\n * Project a Home glyph (or any icon) inside the first link for a compact trail.\n * @doc-file breadcrumb.with-icons.example.ts\n * @doc-example Truncated\n * `kjMaxItems` clips the middle of long trails and renders an ellipsis cell.\n * @doc-file breadcrumb.truncated.example.ts\n * @doc-example Custom separator\n * Swap `--kj-breadcrumb-separator-content` for `›`, `→`, or any glyph.\n * @doc-file breadcrumb.custom-separator.example.ts\n * @doc-example Long path\n * How a 6+ level trail collapses with the default overflow behaviour.\n * @doc-file breadcrumb.long-path.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus to the next breadcrumb link\n * Enter — Activates the focused link (native anchor semantics)\n *\n * @doc-aria\n * aria-label — `\"Breadcrumb\"` on the nav landmark; override via `kjAriaLabel`\n * aria-current — `\"page\"` on the terminal `<kj-breadcrumb-current>` cell\n * role — `navigation` on the host\n *\n * @doc-touch\n * Links inherit `<kj-link>` sizing — the `sm` default keeps the trail\n * compact. Bump `kjSize` on the host or individual links when the trail is\n * the primary navigation target on mobile.\n *\n * @doc-a11y\n * Renders a `<nav aria-label=\"Breadcrumb\">` landmark with an ordered list\n * inside. The current page cell carries `aria-current=\"page\"` (not a link)\n * so AT users know they're already on it. Separators are decorative — the\n * default CSS pseudo-element keeps them out of the accessibility tree.\n *\n * @doc-related link,navigation,tabs\n *\n * @doc-css-var\n * --kj-breadcrumb-gap — Gap between crumbs and separators.\n * --kj-breadcrumb-separator-content — Content for the auto CSS separator. Defaults to `'/'`; swap for `'›'` or any glyph.\n * --kj-breadcrumb-overflow-pad — Horizontal padding on the ellipsis cell.\n * --kj-color-breadcrumb-muted — Color for non-current crumbs and separators. Inherits --kj-fg-muted.\n * --kj-color-breadcrumb-current — Color for the current-page cell. Inherits --kj-fg-default.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n * @doc-description Themed breadcrumb trail with a nav landmark, configurable separator, and overflow ellipsis.\n * @doc-is-main\n */\n@Component({\n selector: 'nav[kj-breadcrumb], kj-breadcrumb',\n standalone: true,\n hostDirectives: [\n {\n directive: KjBreadcrumb,\n inputs: ['kjAriaLabel', 'kjSeparator', 'kjMaxItems', 'kjOverflow'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './breadcrumb.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-breadcrumb',\n 'role': 'navigation',\n '[attr.data-size]': 'kjSize()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbComponent {\n /** Size preset cascaded onto descendants. Default `'md'`. */\n readonly kjSize = input<string>('md');\n}\n\n/**\n * Wraps `KjBreadcrumbList`. Renders an `<ol>` host inside the breadcrumb\n * root via host-directive composition.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Component({\n selector: 'ol[kj-breadcrumb-list], kj-breadcrumb-list',\n standalone: true,\n hostDirectives: [{ directive: KjBreadcrumbList, inputs: ['kjWrap'] }],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-breadcrumb-list' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbListComponent {}\n\n/**\n * Wraps `KjBreadcrumbItem`. Renders a `<li>` host inside the list.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Component({\n selector: 'li[kj-breadcrumb-item], kj-breadcrumb-item',\n standalone: true,\n hostDirectives: [KjBreadcrumbItem],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-breadcrumb-item' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbItemComponent {}\n\n/**\n * Wraps `KjBreadcrumbLink`. Renders the per-crumb `<a kjBreadcrumbLink>`\n * with breadcrumb defaults (muted variant, small size, hover-only underline).\n *\n * Renders an inner `<a>` so the link's data attributes, ARIA semantics, and\n * external/disabled plumbing land on the actual hyperlink — mirrors the\n * `<kj-link>` \"directive on inner host\" pattern.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Component({\n selector: 'kj-breadcrumb-link',\n standalone: true,\n imports: [KjLink],\n template: `\n <a\n kjLink\n class=\"kj-breadcrumb-link kj-link\"\n data-breadcrumb-link=\"\"\n [attr.href]=\"kjHref() ?? null\"\n [attr.target]=\"kjTarget() ?? null\"\n [attr.aria-label]=\"kjAriaLabel() ?? null\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjUnderline]=\"kjUnderline()\"\n [kjExternal]=\"kjExternal()\"\n [kjDisabled]=\"kjDisabled()\"\n >\n <ng-content />\n </a>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbLinkComponent {\n /** Bound to the inner `<a [href]>`. */\n readonly kjHref = input<string | undefined>(undefined);\n\n /** Bound to the inner `<a [target]>`. */\n readonly kjTarget = input<'_self' | '_blank' | '_parent' | '_top' | string | undefined>(undefined);\n\n /** Bound to `[attr.aria-label]` on the inner `<a>`. */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n\n /** KjLink variant. Defaults to `'muted'` (the breadcrumb default). */\n readonly kjVariant = input<string>('muted');\n\n /** KjLink size. Defaults to `'sm'` (the breadcrumb default). */\n readonly kjSize = input<string>('sm');\n\n /** Underline mode. Defaults to `'hover'`. */\n readonly kjUnderline = input<'always' | 'hover' | 'none'>('hover');\n\n /** External-link tri-state. Forwarded to `KjLink`. */\n readonly kjExternal = input(false);\n\n /** Disabled-link bundle. Forwarded to `KjLink`. */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n}\n\n/**\n * Wraps `KjBreadcrumbCurrent`. Renders a `<span>` cell with\n * `aria-current=\"page\"` (selector restriction on the directive) via\n * host-directive composition.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Component({\n selector: 'span[kj-breadcrumb-current], kj-breadcrumb-current',\n standalone: true,\n hostDirectives: [KjBreadcrumbCurrent],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-breadcrumb-current' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbCurrentComponent {}\n\n/**\n * Wraps `KjBreadcrumbSeparator`. Renders a `<li>` separator cell for\n * icon-based separators (where the auto CSS pseudo-element won't do).\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Component({\n selector: 'li[kj-breadcrumb-separator], kj-breadcrumb-separator',\n standalone: true,\n hostDirectives: [KjBreadcrumbSeparator],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-breadcrumb-separator' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbSeparatorComponent {}\n\n/**\n * Wraps `KjBreadcrumbEllipsis`. Renders an overflow indicator cell.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Component({\n selector: 'kj-breadcrumb-ellipsis',\n standalone: true,\n hostDirectives: [KjBreadcrumbEllipsis],\n template: `<ng-content>…</ng-content>`,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-breadcrumb-ellipsis' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBreadcrumbEllipsisComponent {}\n","import { Component, ChangeDetectionStrategy, ModelSignal, ViewEncapsulation, input, model } from '@angular/core';\nimport { KjButton } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless KjButton directive.\n *\n * Variant and size are user-configurable strings. Configure the allowed values\n * and defaults via `provideKjButton(…)` at the application or component scope.\n *\n * @example\n * ```html\n * <kj-button kjVariant=\"destructive\" kjSize=\"lg\" [kjLoading]=\"busy()\">\n * Delete\n * </kj-button>\n * ```\n * @doc-example Default\n * The default playground — variant `secondary`, size `md`, no states.\n * @doc-file button.example.ts\n * @doc-example Usage\n * A walkthrough of the most common button usages — variants, sizes,\n * loading / disabled / pressed states, and a click handler. Use this as the\n * copy-paste starting point for new screens.\n * @doc-file button.usage.example.ts\n * @doc-example Variants\n * Primary / secondary / ghost / destructive — pick the visual weight that\n * matches the action's importance.\n * @doc-file button.variants.example.ts\n * @doc-example Sizes\n * `sm`, `md`, `lg` — `md` is the default. `sm` keeps a 44px touch target via\n * padding so it stays WCAG 2.5.5 compliant.\n * @doc-file button.sizes.example.ts\n * @doc-example Disabled\n * `[disabled]=\"true\"` removes the button from the tab order and dims it. Use\n * for forms where validation hasn't passed.\n * @doc-file button.disabled.example.ts\n * @doc-example Loading\n * Toggle `[loading]=\"true\"` while a request is in-flight. Implies disabled —\n * don't set both.\n * @doc-file button.loading.example.ts\n * @doc-example Pressed (toggle)\n * Stateful toggle via `[kjPressed]`. `aria-pressed` is wired automatically.\n * @doc-file button.pressed.example.ts\n * @doc-example Icon-only\n * Provide `[kjAriaLabel]` for screen readers — dev-mode enforces it.\n * @doc-file button.icon.example.ts\n * @doc-example Anchor as button\n * Render as `<a>` while keeping button visuals — handy for navigation that\n * needs to look like an action.\n * @doc-file button.anchor.example.ts\n * @doc-example Configured presets\n * `provideKjButton({ variant: 'primary' })` sets the default for every\n * button in the injection scope.\n * @doc-file button.configured.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Activates the button (native click on the underlying\n * <button>; for [kjPressed] toggles this also flips the pressed state)\n * Tab — Moves focus to the next focusable element\n *\n * @doc-aria\n * aria-disabled — Reflected when [kjDisabled] or [kjLoading] is true\n * aria-busy — Reflected when [kjLoading] is true\n * aria-pressed — Reflected when used as a toggle (kjPressed is bound)\n * aria-label — Wired through to the inner <button>; required for icon-only\n * data-variant — Mirrors the resolved variant for theme/scope hooks\n * data-size — Mirrors the resolved size for theme/scope hooks\n *\n * @doc-css-var\n * --kj-button-bg — Background fill. Variant rules set this; override to brand-paint a one-off.\n * --kj-button-fg — Foreground (label + icon) color. Resolved per variant.\n * --kj-button-bg-hover — Hover background. Defaults to an 8% black mix on the variant fill.\n * --kj-button-fg-hover — Hover foreground (default variant only).\n * --kj-button-border-color — Border color. Outline/destructive set this per variant.\n * --kj-button-border-width — Border thickness. Inherits the theme's --kj-border.\n * --kj-button-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-button-padding-x — Horizontal padding. Sizes override.\n * --kj-button-padding-y — Vertical padding. Sizes override.\n * --kj-button-gap — Gap between icon and label.\n * --kj-button-font — Font family. Defaults to --kj-font-sans.\n * --kj-button-font-size — Font size. Sizes override.\n * --kj-button-font-weight — Font weight. Default 600; brutalist themes bump it.\n * --kj-button-letter-spacing — Letter tracking. Default -0.01em.\n * --kj-button-height — Explicit height. Sizes (sm/md/lg/icon) set this.\n * --kj-button-min-width — Minimum width. Defaults to auto.\n * --kj-button-hover-translate — Y translation on hover (lift). -2px default; bauhaus -4px.\n * --kj-button-translate-active — Transform on press. Defaults to none.\n * --kj-button-shadow — Box shadow on the `default` variant. Unset by default — opt in at the page/scope where you want the brutalist offset (e.g. landing hero, docs playground stage).\n * --kj-button-shadow-hover — Box shadow on hover (default variant). Falls back to --kj-button-shadow.\n * --kj-button-shadow-active — Box shadow on press (default variant). Falls back to --kj-button-shadow.\n *\n * @doc-touch\n * `size=\"lg\"` and `size=\"icon\"` meet WCAG 2.5.5 ≥ 44×44 by default.\n * `sm` and `md` rely on the inline-text-link exception — embed in text only.\n *\n * @doc-a11y\n * Renders a real <button type=\"...\"> (defaults to \"button\"), so the\n * native focus ring, click semantics, and form-submission behaviour\n * are preserved. `KjFocusRing` (from kjButton) shows the outline on\n * `:focus-visible` only — never on mouse-down. When used as an anchor\n * via `[routerLink]`, Enter activates per native anchor semantics.\n *\n * @doc-related button-group,link,icon\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name button\n * @doc-is-main\n * @doc-description Themed button with variants, sizes, and built-in disabled, loading, and pressed states.\n */\n@Component({\n selector: 'kj-button',\n standalone: true,\n imports: [KjButton],\n template: `\n <button\n [type]=\"kjType()\"\n kjButton\n class=\"kj-button\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjLoading]=\"kjLoading()\"\n [kjFullWidth]=\"kjFullWidth()\"\n [(kjPressed)]=\"kjPressed\"\n [attr.aria-label]=\"kjAriaLabel()\"\n >\n @if (kjLoading()) {\n <span class=\"kj-button__spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content />\n }\n </button>\n `,\n styleUrl: './button.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjButtonComponent {\n readonly kjVariant = input('default');\n readonly kjSize = input('md');\n readonly kjDisabled = input(false);\n readonly kjLoading = input(false);\n readonly kjFullWidth = input(false);\n // Field annotation matches the directive's — ng-packagr otherwise narrows\n // both sides to ModelSignal<boolean>, breaking the [(kjPressed)] binding.\n readonly kjPressed: ModelSignal<boolean | undefined> = model<boolean | undefined>(undefined);\n readonly kjType = input<'button' | 'submit' | 'reset'>('button');\n readonly kjAriaLabel = input<string | undefined>(undefined);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport { KjButtonGroup, KjButtonGroupOrientation } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjButtonGroup` directive. Renders a\n * visually-joined cluster of `<kj-button>` children: the outer corners stay\n * rounded while inner edges between adjacent buttons collapse to produce the\n * segmented \"chunky\" look, in either horizontal or vertical orientation.\n *\n * Group-level `kjVariant` / `kjSize` are surfaced through the\n * `KJ_BUTTON_GROUP` context for child buttons that read it as a fallback;\n * children that set their own `kjVariant` / `kjSize` always win. `kjDisabled`\n * on the group OR-s with each child's own disabled state.\n *\n * @example\n * ```html\n * <kj-button-group>\n * <kj-button>Save</kj-button>\n * <kj-button>Cancel</kj-button>\n * <kj-button>Delete</kj-button>\n * </kj-button-group>\n * ```\n * @doc-example Default\n * The default playground — three joined outline buttons in a row.\n * @doc-file button-group.example.ts\n * @doc-example Usage\n * The common shapes — segmented toolbar, vertical stack, and an icon-only\n * cluster. Use this as the copy-paste starting point.\n * @doc-file button-group.usage.example.ts\n * @doc-example Vertical\n * `kjOrientation=\"vertical\"` stacks buttons and joins their top/bottom edges.\n * @doc-file button-group.vertical.example.ts\n * @doc-example Variants\n * Set `kjVariant` on the group to cascade onto every child button.\n * @doc-file button-group.variants.example.ts\n * @doc-example Toggle\n * Pair with `[kjPressed]` on each child to build a segmented control.\n * @doc-file button-group.toggle.example.ts\n * @doc-example Icon only\n * Pure-icon children — give each an `kjAriaLabel` for AT users.\n * @doc-file button-group.icon-only.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus through each button in DOM order\n * Enter|Space — Activates the focused button (native click)\n *\n * @doc-aria\n * role — `group` on the host (set by `KjButtonGroup` directive)\n * aria-label — Override via `kjAriaLabel` for toolbars without surrounding context\n * aria-orientation — Mirrors `kjOrientation` for AT\n * data-orientation — Mirrors `kjOrientation` for theme/scope hooks\n *\n * @doc-touch\n * Children inherit `<kj-button>` sizing rules — `lg` and `icon` sizes clear\n * WCAG 2.5.5 ≥ 44×44 by default. For high-density toolbars on touch, raise\n * the children to `lg` or pad the host.\n *\n * @doc-a11y\n * Renders a `role=\"group\"` so AT announces \"group, 3 buttons\" instead of\n * listing each independently. Set `kjAriaLabel` for toolbars that lack a\n * surrounding labelled landmark. `kjDisabled` on the group OR-s with each\n * child's own disabled state.\n *\n * @doc-related button,toggle,tabs\n *\n * @doc-css-var\n * --kj-button-group-gap — Gap between adjacent buttons. Defaults to 0 (segmented look); raise for a spaced cluster.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name button-group\n * @doc-description Themed segmented button cluster that joins adjacent buttons into a single toolbar.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-button-group',\n standalone: true,\n hostDirectives: [\n {\n directive: KjButtonGroup,\n inputs: ['kjOrientation', 'kjVariant', 'kjSize', 'kjDisabled'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './button-group.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-button-group',\n '[attr.aria-label]': 'kjAriaLabel()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjButtonGroupComponent {\n /**\n * Layout axis. Forwarded to the composed `KjButtonGroup` directive, which\n * mirrors it to `aria-orientation` / `data-orientation` on the host.\n * @default 'horizontal'\n */\n readonly kjOrientation = input<KjButtonGroupOrientation>('horizontal');\n\n /**\n * Default variant forwarded to children via `KJ_BUTTON_GROUP`. Children\n * that set their own `kjVariant` override this fallback.\n */\n readonly kjVariant = input<string | undefined>(undefined);\n\n /**\n * Default size forwarded to children via `KJ_BUTTON_GROUP`. Per-child\n * overrides win.\n */\n readonly kjSize = input<string | undefined>(undefined);\n\n /**\n * Group-level disabled flag. OR-ed with each child button's own\n * `kjDisabled`.\n */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Optional `aria-label` for the host. Useful when the group sits in a\n * toolbar or otherwise needs an accessible name.\n */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n model,\n} from '@angular/core';\nimport {\n KjCalendar,\n KjCalendarDay,\n KjCalendarGrid,\n KjCalendarHeader,\n KjIconDirective,\n} from '@kouji-ui/core';\n\n/**\n * Styled calendar wrapper. Composes the headless `KjCalendar` directives into\n * a self-contained day-grid surface — header with prev/next arrows, weekday\n * row, and 6×7 day cells.\n *\n * Native `Date` only — locale-aware via `Intl.DateTimeFormat`. No third-party\n * date library.\n *\n * **Keyboard contract** (when focus is inside the grid, per APG):\n * - `ArrowLeft` / `ArrowRight` — ±1 day\n * - `ArrowUp` / `ArrowDown` — ±1 week\n * - `Home` / `End` — first / last day of the focused week\n * - `PageUp` / `PageDown` — ±1 month\n * - `Shift+PageUp` / `Shift+PageDown` — ±1 year\n * - `Enter` / `Space` — select the focused date\n *\n * @doc-example Default\n * The default playground — inline single-date selection bound to a signal.\n * @doc-file calendar.example.ts\n * @doc-example Usage\n * The common shape — bound value, min/max bounds, and a disabled-dates\n * predicate. Use this as the copy-paste starting point.\n * @doc-file calendar.usage.example.ts\n *\n * @doc-keyboard\n * ArrowLeft|ArrowRight — Moves focus ±1 day\n * ArrowUp|ArrowDown — Moves focus ±1 week\n * Home|End — First / last day of the focused week\n * PageUp|PageDown — ±1 month\n * Shift+PageUp|Shift+PageDown — ±1 year\n * Enter|Space — Selects the focused date\n * Tab — Moves focus out of the grid (single grid tab stop)\n *\n * @doc-aria\n * role — `grid` on the day matrix; `gridcell` on each day button\n * aria-label — `\"Calendar\"` on the host; override via `kjAriaLabel`\n * aria-labelledby — Grid references the caption heading id\n * aria-selected — Reflected on the currently-selected day cell\n * aria-disabled — Reflected on out-of-range and disabled day cells\n * aria-current — `\"date\"` on today's cell\n *\n * @doc-touch\n * Day cells render real `<button>` elements; ensure the surrounding\n * container provides ≥ 44×44 cells (WCAG 2.5.5). The default grid spacing\n * meets this on most screen sizes — verify when scaling down.\n *\n * @doc-a11y\n * Implements the WAI-ARIA APG Date Picker (grid) pattern. A single tab\n * stop into the grid, then arrow keys roam without leaving — Tab takes\n * focus to the next region. Native `Date` only, locale-aware via\n * `Intl.DateTimeFormat` — no third-party date library.\n *\n * @doc-related date-picker,time-picker,input\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name calendar\n * @doc-description Themed inline calendar grid with min/max bounds, disabled dates, and full APG keyboard support.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-calendar',\n standalone: true,\n imports: [KjCalendar, KjCalendarHeader, KjCalendarGrid, KjCalendarDay, KjIconDirective],\n template: `\n <div\n kjCalendar\n class=\"kj-calendar\"\n [kjValue]=\"kjValue() ?? null!\"\n (kjValueChange)=\"kjValue.set($event)\"\n [kjMin]=\"kjMin() ?? null!\"\n [kjMax]=\"kjMax() ?? null!\"\n [kjDisabledDates]=\"kjDisabledDates() ?? null!\"\n [kjLocale]=\"kjLocale()\"\n [kjFirstDayOfWeek]=\"kjFirstDayOfWeek()\"\n [kjAriaLabel]=\"kjAriaLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n >\n <div class=\"kj-calendar__header\" kjCalendarHeader #hdr=\"kjCalendarHeader\">\n <button\n type=\"button\"\n class=\"kj-calendar__nav\"\n aria-label=\"Previous month\"\n [disabled]=\"hdr.prevDisabled()\"\n (click)=\"hdr.prev()\"\n >‹</button>\n <h2 class=\"kj-calendar__caption\" [id]=\"hdr.captionId()\">{{ hdr.label() }}</h2>\n <button\n type=\"button\"\n class=\"kj-calendar__nav\"\n aria-label=\"Next month\"\n [disabled]=\"hdr.nextDisabled()\"\n (click)=\"hdr.next()\"\n ><i kjIcon=\"chevron-right\"></i></button>\n </div>\n <table class=\"kj-calendar__grid\" kjCalendarGrid #g=\"kjCalendarGrid\">\n <thead>\n <tr>\n @for (n of g.weekdayShort(); track $index) {\n <th\n scope=\"col\"\n class=\"kj-calendar__weekday\"\n [attr.abbr]=\"g.weekdayLong()[$index]\"\n >{{ n }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of g.weeks(); track $index) {\n <tr>\n @for (d of week; track d.getTime()) {\n <td class=\"kj-calendar__cell\">\n <button\n class=\"kj-calendar__day\"\n kjCalendarDay\n [kjDate]=\"d\"\n >{{ d.getDate() }}</button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n `,\n styleUrl: './calendar.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-calendar-host', style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCalendarComponent {\n /** Currently selected date. Two-way bindable — `[(kjValue)]`. `null` clears. */\n readonly kjValue = model<Date | null>(null);\n\n /** Earliest selectable date (inclusive). `null` = open. */\n readonly kjMin = input<Date | null>(null);\n\n /** Latest selectable date (inclusive). `null` = open. */\n readonly kjMax = input<Date | null>(null);\n\n /** Per-date predicate; `false` disables the cell. */\n readonly kjDisabledDates = input<((d: Date) => boolean) | null>(null);\n\n /** BCP-47 locale tag. Defaults to Angular's `LOCALE_ID`. */\n readonly kjLocale = input<string>('');\n\n /** First day of the week (0=Sun … 6=Sat). Locale-derived if not set. */\n readonly kjFirstDayOfWeek = input<number>(0);\n\n /** Accessible label override. Defaults to `\"Calendar\"`. */\n readonly kjAriaLabel = input<string>('Calendar');\n\n /** Disable the entire calendar. */\n readonly kjDisabled = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, input } from '@angular/core';\n\n/**\n * Themed surface container — card, panel, feature box.\n * Presentation-only: no headless directive in core, no behavior.\n *\n * Compose with `<kj-card-header>`, `<kj-card-content>`, `<kj-card-footer>`,\n * `<kj-card-cover>` sub-components for structured layouts.\n *\n * Variants:\n * - `default` — base surface (background `--kj-bg-surface`)\n * - `outline` — transparent background, neutral border\n * - `subtle` — slightly elevated surface (background `--kj-bg-field`), no border\n *\n * @example\n * ```html\n * <kj-card>Default card</kj-card>\n * <kj-card variant=\"outline\">Outlined</kj-card>\n * ```\n * @doc-example Default\n * The default playground — a single card with title and body text.\n * @doc-file card.example.ts\n * @doc-example Usage\n * The common shape — header / content / footer with action buttons. Use this\n * as the copy-paste starting point.\n * @doc-file card.usage.example.ts\n * @doc-example Full\n * Full composition — cover, header, content, and footer actions.\n * @doc-file card.full.example.ts\n * @doc-example Cover\n * `<kj-card-cover>` for full-bleed media at the top of the card.\n * @doc-file card.cover.example.ts\n *\n * @doc-aria\n * data-variant — Mirrors the resolved variant for theme/scope hooks\n * data-shadow — Optional `\"lift\"` attribute pulls in --kj-button-shadow for brutalist offsets\n *\n * @doc-touch\n * Cards are surfaces, not tap targets. When the entire card is interactive\n * (clickable tile) wrap the content in a `<button>` or `<a>` and ensure the\n * target spans ≥ 44×44.\n *\n * @doc-a11y\n * Renders a plain `<div>` surface — no implicit role. Use `<kj-card-title>`\n * (which mounts an `<h3>`) so the card's heading lands in the document\n * outline. For clickable cards, wrap interactive content in a real link or\n * button so keyboard activation works without extra wiring.\n *\n * @doc-related list,empty-state,skeleton\n *\n * @doc-css-var\n * --kj-card-bg — Background fill. Variant rules set this; override to brand-paint a one-off.\n * --kj-card-fg — Foreground (body text) color. Defaults to --kj-fg-default.\n * --kj-card-border-color — Border color. Outline variant sets this; subtle/default keep transparent.\n * --kj-card-border-width — Border thickness. Inherits --kj-border.\n * --kj-card-radius — Corner radius. Inherits --kj-radius-box.\n * --kj-card-padding-x — Horizontal padding for header/content/footer bands.\n * --kj-card-padding-y — Vertical padding for header/content/footer bands.\n * --kj-card-shadow — Box shadow. `data-shadow=\"lift\"` borrows --kj-button-shadow for brutalist offsets.\n * --kj-card-cover-height — Height of the cover slot. Sizes (sm/md/lg) override.\n * --kj-card-cover-fit — object-fit for media in the cover slot. `cover` (default) or `contain`.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name card\n * @doc-description Themed surface container for grouping related content with header, footer, and cover sub-components.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-card',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './card.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-card',\n '[attr.data-variant]': 'variant()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardComponent {\n readonly variant = input<'default' | 'outline' | 'subtle'>('default');\n}\n\n/**\n * Full-bleed image / video area at the top of a card.\n * `size` controls the fixed height (sm = 8rem, md = 12rem default, lg = 16rem).\n * `fit` controls `object-fit` on the inner media (`cover` default — fills and\n * crops; `contain` — letterboxes, no crop). Override the height directly with\n * the CSS custom property `--kj-card-cover-height` if the presets don't fit.\n * @doc\n * @doc-name card\n */\n@Component({\n selector: 'kj-card-cover',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-card-cover',\n '[attr.data-size]': 'size()',\n '[attr.data-fit]': 'fit()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardCoverComponent {\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly fit = input<'cover' | 'contain'>('cover');\n}\n\n/**\n * Header band inside the card. Flexes title/subtitle on the left and an optional extra slot on the right.\n * @doc\n * @doc-name card\n */\n@Component({\n selector: 'kj-card-header',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-card-header' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardHeaderComponent {}\n\n/**\n * Card heading. Renders semantically as `<h3>`.\n * @doc\n * @doc-name card\n */\n@Component({\n selector: 'kj-card-title',\n standalone: true,\n template: `<h3 class=\"kj-card-title\"><ng-content /></h3>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardTitleComponent {}\n\n/**\n * Card subtitle — smaller, lighter text below the title.\n * @doc\n * @doc-name card\n */\n@Component({\n selector: 'kj-card-subtitle',\n standalone: true,\n template: `<p class=\"kj-card-subtitle\"><ng-content /></p>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardSubtitleComponent {}\n\n/**\n * Main body slot. `padded` toggles the standard padding (default true).\n * @doc\n * @doc-name card\n */\n@Component({\n selector: 'kj-card-content',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-card-content',\n '[attr.data-padded]': \"padded() ? '' : null\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardContentComponent {\n readonly padded = input(true);\n}\n\n/**\n * Footer actions area. `align` controls button placement.\n * @doc\n * @doc-name card\n */\n@Component({\n selector: 'kj-card-footer',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-card-footer',\n '[attr.data-align]': 'align()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCardFooterComponent {\n readonly align = input<'start' | 'center' | 'end' | 'between'>('end');\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n contentChildren,\n inject,\n input,\n ViewChild,\n} from '@angular/core';\nimport {\n KJ_CAROUSEL,\n KjCarousel,\n KjCarouselAutoplay,\n KjCarouselIndicator,\n KjCarouselIndicators,\n KjCarouselNext,\n KjCarouselPauseToggle,\n KjCarouselPrevious,\n KjCarouselSlide,\n KjCarouselViewport,\n KjIconDirective,\n KjLiveRegion,\n KjVisuallyHidden,\n} from '@kouji-ui/core';\nimport type {\n KjCarouselAlign,\n KjCarouselControlPattern,\n KjCarouselOrientation,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjCarousel` directive — the rotating\n * region with previous / next controls, optional dot indicators, and an\n * opt-in autoplay attached behaviour.\n *\n * Compose the wrappers — `<kj-carousel>`, `<kj-carousel-viewport>`,\n * `<kj-carousel-slide>`, `<kj-carousel-previous>`, `<kj-carousel-next>`,\n * `<kj-carousel-indicators>`, `<kj-carousel-pause>`, `<kj-carousel-autoplay>` —\n * to mirror the directive family. The active slide is keyed by `value`,\n * not by structural position, so consumers can two-way bind to a router\n * param or analytics key.\n *\n * The wrapper also renders a visually hidden `kjLiveRegion` inside its\n * template so user-initiated slide changes are announced politely without\n * the consumer having to wire a live region of their own.\n *\n * @example\n * ```html\n * <kj-carousel [(value)]=\"active\" label=\"Featured products\">\n * <kj-carousel-previous aria-label=\"Previous slide\">‹</kj-carousel-previous>\n * <kj-carousel-viewport>\n * <kj-carousel-slide value=\"a\" label=\"Mountain meadow\">\n * <article>…</article>\n * </kj-carousel-slide>\n * </kj-carousel-viewport>\n * <kj-carousel-next aria-label=\"Next slide\">›</kj-carousel-next>\n * <kj-carousel-indicators />\n * </kj-carousel>\n * ```\n *\n * @doc-example Default\n * The default playground — four slides with manual prev / next controls.\n * @doc-file carousel.example.ts\n * @doc-example Usage\n * The common shape — bound active slide, prev / next, and indicator dots.\n * Use this as the copy-paste starting point.\n * @doc-file carousel.usage.example.ts\n * @doc-example With indicators\n * Add `<kj-carousel-indicators>` to expose a dot list under the viewport.\n * @doc-file carousel.indicators.example.ts\n * @doc-example Autoplay with pause control\n * Pair `<kj-carousel-autoplay>` with `<kj-carousel-pause>` whenever delay > 5s (WCAG 2.2.2).\n * @doc-file carousel.autoplay.example.ts\n * @doc-example Tabbed carousel\n * `kjControlPattern=\"tabs\"` switches indicators to a tablist for editorial decks.\n * @doc-file carousel.tabs-pattern.example.ts\n * @doc-example Lazy-loaded images\n * Render heavy media on-demand using the slide's visibility signal.\n * @doc-file carousel.lazy-load.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus through prev / next / pause / indicators in DOM order\n * Enter|Space — Activates the focused control\n * ArrowLeft|ArrowRight — On indicator tablist mode, moves between tabs (auto-activates the slide)\n *\n * @doc-aria\n * role — `region` on the host; `aria-roledescription=\"carousel\"`\n * aria-label — Required; supply via `label` or `labelledby`\n * aria-live — Politely announces slide changes via the wrapper's hidden live region\n * aria-current — `\"true\"` on the active indicator\n * aria-controls — Prev / next reference the viewport id\n *\n * @doc-touch\n * Prev / next / pause buttons default to a ≥ 44×44 control diameter\n * (`--kj-carousel-control-size`). Indicators are smaller dots — if they're\n * the primary nav on mobile, switch to `kjControlPattern=\"tabs\"` for larger\n * targets.\n *\n * @doc-a11y\n * Follows the WAI-ARIA APG Carousel pattern. Autoplay > 5s requires a\n * pause control (WCAG 2.2.2 Pause, Stop, Hide) — pair `kj-carousel-autoplay`\n * with `kj-carousel-pause` whenever it's present. The wrapper's internal\n * `kjLiveRegion` announces user-initiated slide changes politely.\n *\n * @doc-related tabs,accordion,list\n *\n * @doc-css-var\n * --kj-carousel-gap — Gap between viewport and controls + between slides.\n * --kj-carousel-radius — Corner radius for viewport and slides. Inherits --kj-radius-box.\n * --kj-carousel-control-size — Diameter of prev/next/pause buttons. Defaults to 44px for WCAG touch.\n * --kj-carousel-control-bg — Background of prev/next/pause buttons.\n * --kj-carousel-control-fg — Foreground (icon) color of prev/next/pause buttons.\n * --kj-carousel-indicator-size — Diameter of the indicator dots.\n * --kj-carousel-indicator-active — Fill color of the active indicator dot.\n * --kj-carousel-indicator-idle — Fill color of idle indicator dots.\n * --kj-carousel-slides-per-view — Number of slides visible at once. Defaults to 1.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n * @doc-description Themed rotating content region with prev/next controls, indicators, autoplay, and accessible announcements.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-carousel',\n standalone: true,\n imports: [KjLiveRegion, KjVisuallyHidden],\n hostDirectives: [\n {\n directive: KjCarousel,\n inputs: [\n 'kjValue: value',\n 'kjLoop: loop',\n 'kjOrientation: orientation',\n 'kjSlidesPerView: slidesPerView',\n 'kjSlidesPerAdvance: slidesPerAdvance',\n 'kjAlign: align',\n 'kjLabel: label',\n 'kjLabelledby: labelledby',\n 'kjDraggable: draggable',\n ],\n outputs: ['kjValueChange: valueChange'],\n },\n ],\n template: `\n <ng-content />\n <div kjVisuallyHidden kjLiveRegion #liveRegion=\"kjLiveRegion\"></div>\n `,\n styleUrl: './carousel.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-carousel',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselComponent implements AfterViewInit {\n protected readonly carousel = inject(KjCarousel);\n\n @ViewChild('liveRegion', { static: true }) protected liveRegion!: KjLiveRegion;\n\n ngAfterViewInit(): void {\n this.carousel.registerLiveRegion(this.liveRegion);\n }\n}\n\n/**\n * Styled wrapper around `KjCarouselViewport`. Hosts the scroll container that\n * the slides scroll-snap into, and forwards through to the underlying\n * directive (no public inputs).\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-viewport',\n standalone: true,\n hostDirectives: [KjCarouselViewport],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-carousel-viewport' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselViewportComponent {}\n\n/**\n * Styled wrapper around `KjCarouselSlide`. Project a single slide; the\n * directive's `aria-label=\"N of M[: label]\"` is computed from its index in\n * registration order plus the optional `[label]` shorthand.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-slide',\n standalone: true,\n hostDirectives: [\n {\n directive: KjCarouselSlide,\n inputs: ['kjSlideValue: value', 'kjSlideLabel: label', 'kjSlideAlign: align'],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-carousel-slide',\n '[attr.data-align]': 'effectiveAlign()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselSlideComponent {\n protected readonly slide = inject(KjCarouselSlide);\n protected readonly effectiveAlign = computed(() => this.slide.effectiveAlign());\n}\n\n/**\n * Styled wrapper around `KjCarouselPrevious`. Renders a real `<button>` so\n * Enter / Space activation, focus, and disabled semantics work for free; the\n * `aria-label` input is required at runtime (dev-mode warn if omitted).\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-previous',\n standalone: true,\n imports: [KjCarouselPrevious],\n template: `\n <button\n type=\"button\"\n kjCarouselPrevious\n class=\"kj-carousel-control kj-carousel-previous\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <ng-content>‹</ng-content>\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselPreviousComponent {\n /** Accessible name for the control. Required by WCAG 4.1.2 — defaults to `\"Previous slide\"`. */\n readonly ariaLabel = input<string>('Previous slide', { alias: 'aria-label' });\n}\n\n/**\n * Styled wrapper around `KjCarouselNext`. Symmetric counterpart of\n * `KjCarouselPreviousComponent`.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-next',\n standalone: true,\n imports: [KjCarouselNext, KjIconDirective],\n template: `\n <button\n type=\"button\"\n kjCarouselNext\n class=\"kj-carousel-control kj-carousel-next\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <ng-content><i kjIcon=\"chevron-right\"></i></ng-content>\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselNextComponent {\n /** Accessible name for the control. Required by WCAG 4.1.2 — defaults to `\"Next slide\"`. */\n readonly ariaLabel = input<string>('Next slide', { alias: 'aria-label' });\n}\n\n/**\n * Styled wrapper around `KjCarouselIndicators`. Auto-projects one\n * `<button kjCarouselIndicator>` per registered slide (dot list) when no\n * `<kj-carousel-indicator>` children are projected, otherwise leaves the\n * projected children alone — letting consumers swap dots for thumbnails or\n * numbered chips.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-indicators',\n standalone: true,\n imports: [KjCarouselIndicator],\n hostDirectives: [\n {\n directive: KjCarouselIndicators,\n inputs: ['kjControlPattern: controlPattern', 'kjAriaLabel: ariaLabel'],\n },\n ],\n template: `\n <ng-content />\n @if (autoProject()) {\n @for (slide of carousel.slides(); track slide.kjSlideValue()) {\n <button\n type=\"button\"\n kjCarouselIndicator\n class=\"kj-carousel-indicator\"\n [kjForValue]=\"slide.kjSlideValue()\"\n [attr.aria-label]=\"'Slide ' + ($index + 1)\"\n [attr.data-kj-indicator-value]=\"slide.kjSlideValue()\"\n ></button>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-carousel-indicators' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselIndicatorsComponent {\n protected readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n private readonly projectedIndicators = contentChildren(KjCarouselIndicator);\n\n /** Whether to render the auto-projected dot list (true when no indicator is projected). */\n protected readonly autoProject = computed(() => this.projectedIndicators().length === 0);\n}\n\n/**\n * Styled wrapper around `KjCarouselAutoplay`. Lifecycle-only directive — has\n * no visible DOM. Drop next to the carousel content to attach the autoplay\n * behaviour; pair with `<kj-carousel-pause>` whenever the delay exceeds\n * 5000 ms (WCAG 2.2.2).\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-autoplay',\n standalone: true,\n hostDirectives: [\n {\n directive: KjCarouselAutoplay,\n inputs: [\n 'kjAutoplayDelay: delay',\n 'kjPauseOnHover: pauseOnHover',\n 'kjPauseOnFocus: pauseOnFocus',\n ],\n },\n ],\n template: ``,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: none;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselAutoplayComponent {}\n\n/**\n * Styled wrapper around `KjCarouselPauseToggle`. Renders a real `<button>`\n * with `aria-pressed` reflecting the carousel's `paused` signal. Required\n * whenever an autoplay directive is present and its delay > 5000 ms.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name carousel\n */\n@Component({\n selector: 'kj-carousel-pause',\n standalone: true,\n imports: [KjCarouselPauseToggle],\n template: `\n <button\n type=\"button\"\n kjCarouselPauseToggle\n class=\"kj-carousel-pause\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <ng-content>{{ paused() ? '▶' : '❚❚' }}</ng-content>\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCarouselPauseComponent {\n protected readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n /** Accessible name for the toggle. Required by WCAG 4.1.2 — defaults to `\"Pause carousel\"`. */\n readonly ariaLabel = input<string>('Pause carousel', { alias: 'aria-label' });\n protected readonly paused = computed(() => this.carousel.paused());\n}\n\n// Re-export the input types for consumer convenience.\nexport type {\n KjCarouselOrientation,\n KjCarouselAlign,\n KjCarouselControlPattern,\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n} from '@angular/core';\nimport {\n KjChat,\n KjChatAvatar,\n KjChatBubble,\n KjChatFooter,\n KjChatHeader,\n KjChatLog,\n type KjChatRole,\n type KjChatSide,\n type KjChatState,\n} from '@kouji-ui/core';\n\n/**\n * Typed bubble variant set. Mirrors the analysis preset list so consumer\n * templates get IDE autocomplete; the underlying `KjVariant` widens to\n * `string` and is validated against `KJ_CHAT_BUBBLE_CONFIG` in dev mode.\n */\nexport type KjChatBubbleVariant =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'info'\n | 'success'\n | 'warning'\n | 'error';\n\n/** Typed bubble size set. Backed by `KjSize` host directive. */\nexport type KjChatBubbleSize = 'sm' | 'md' | 'lg';\n\n/** Live-region politeness for the log container. */\nexport type KjChatLogLive = 'polite' | 'off';\n\n/**\n * Chat log container. Composes `KjChatLog` via `hostDirectives` so the\n * `role=\"log\"` / `aria-live` / `aria-relevant` host bindings land on the\n * `<kj-chat-log>` custom element itself — that element IS the live region\n * announced by APG's Log pattern, AND the `KJ_CHAT_LOG` provider lives\n * here so projected `<kj-chat>` children find it through their consumer-\n * declared injector chain (content projection preserves the original\n * injection context).\n *\n * Per the analysis we ship `aria-live=\"polite\"` by default and deliberately\n * do not expose `'assertive'` — interrupting the user mid-typing on every\n * inbound message is the canonical chat-app a11y bug.\n *\n * @doc-example Default\n * The default playground — a four-message conversation between two senders.\n * @doc-file chat-bubble.example.ts\n * @doc-example Usage\n * The common shape — start/end sides, primary variant for self, footer\n * read-state. Use this as the copy-paste starting point.\n * @doc-file chat.usage.example.ts\n * @doc-example Sides\n * `kjSide=\"start\"` (theirs) vs `\"end\"` (mine) — drives bubble tail and alignment.\n * @doc-file chat-bubble.sides.example.ts\n * @doc-example Variants\n * default / primary / success / warning / error — pick the visual register.\n * @doc-file chat-bubble.variants.example.ts\n * @doc-example With state\n * Footer `kjState` reflects delivery / read / failed glyphs with an `aria-label`.\n * @doc-file chat-bubble.with-state.example.ts\n * @doc-example Grouped\n * Consecutive rows from the same `kjChatAuthor` collapse their headers and tails.\n * @doc-file chat-bubble.grouped.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus through interactive elements inside the log (links, action buttons)\n *\n * @doc-aria\n * role — `log` on `<kj-chat-log>`; `article` on each `<kj-chat>` row\n * aria-live — `\"polite\"` on the log (assertive is deliberately not exposed)\n * aria-relevant — `\"additions\"` on the log so removed messages don't re-announce\n * aria-labelledby — Row references its header id\n * aria-describedby — Row references its footer (state) id\n * data-side — Mirrors `kjSide` for theme/scope hooks\n * data-grouped — Reflected when consecutive rows share an author\n *\n * @doc-touch\n * Bubbles are reading surfaces, not tap targets. When wiring in action\n * buttons (reply, react, copy) inside a row, size them to ≥ 44×44 and\n * reveal them on hover/focus rather than packing them inline.\n *\n * @doc-a11y\n * Follows the WAI-ARIA APG Log pattern. The log defaults to `aria-live=\"polite\"`\n * so AT users hear inbound messages without interruption — we deliberately\n * do not expose `\"assertive\"`. Avatars are forced `aria-hidden` because the\n * row's header conveys sender identity. Footer state glyphs carry an\n * `aria-label` so \"✓✓\" reads as \"Read\".\n *\n * @doc-related dialog,toast,popover\n *\n * @doc-css-var\n * --kj-chat-gap — Column gap between avatar and bubble in the row grid.\n * --kj-chat-col-gap — Row gap between header, bubble, and footer cells.\n * --kj-chat-bubble-bg — Bubble background fill. Variant rules set this; override per side or sender.\n * --kj-chat-bubble-fg — Bubble foreground (text) color. Resolved per variant.\n * --kj-chat-bubble-radius — Bubble corner radius. Inherits --kj-radius-box.\n * --kj-chat-bubble-padding-x — Horizontal padding inside the bubble. Sizes override.\n * --kj-chat-bubble-padding-y — Vertical padding inside the bubble. Sizes override.\n * --kj-chat-bubble-font-size — Bubble font size. Sizes override.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name chat\n * @doc-description Themed chat message log with bubble variants, avatars, and accessible inbound-message announcements.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-chat-log',\n standalone: true,\n hostDirectives: [\n {\n directive: KjChatLog,\n inputs: ['kjChatLogLive', 'kjChatLogLabel'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './chat.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-chat-log' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjChatLogComponent {}\n\n/**\n * Chat row. Composes `KjChat` via `hostDirectives` so `role=\"article\"` (or\n * the consumer's `kjRole` override), `data-side`, `data-grouped`, and the\n * `aria-labelledby` / `aria-describedby` wiring all land on the `<kj-chat>`\n * host. The `KJ_CHAT` provider lives on the host so projected\n * `<kj-chat-header>`, `<kj-chat-bubble>`, `<kj-chat-footer>` children find\n * it through their original consumer-declared injector chain.\n *\n * Group-by-sender uses `previousElementSibling` traversal — that walk stays\n * deterministic even with the wrapper because the grouping `KjChat`\n * instances live on the visible custom elements that ARE physical DOM\n * siblings inside the log.\n * @doc\n * @doc-name chat\n */\n@Component({\n selector: 'kj-chat',\n standalone: true,\n hostDirectives: [\n {\n directive: KjChat,\n inputs: ['kjSide', 'kjChatAuthor', 'kjChatGrouped', 'kjRole'],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-chat' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjChatComponent {}\n\n/**\n * Sender face slot. Composes `KjChatAvatar` so the slot is forced\n * `aria-hidden=\"true\"` (the row's accessible name comes from the header;\n * letting the avatar's `<img alt>` re-announce the name causes AT users\n * to hear \"Jane Doe, Jane Doe, [message]\"). Project a decorative\n * `<kj-avatar>` (or any ornamental marker) inside.\n * @doc\n * @doc-name chat\n */\n@Component({\n selector: 'kj-chat-avatar',\n standalone: true,\n hostDirectives: [KjChatAvatar],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-chat-avatar' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjChatAvatarComponent {}\n\n/**\n * Sender name + time header. The directive mints a stable id and registers\n * it with the parent row for `aria-labelledby`; the wrapper supplies the\n * `<ng-content>` slot. Per the analysis the header should contain a\n * `<time datetime=\"…\">` element; the directive does not enforce this — the\n * consumer renders it.\n * @doc\n * @doc-name chat\n */\n@Component({\n selector: 'kj-chat-header',\n standalone: true,\n hostDirectives: [KjChatHeader],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-chat-header' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjChatHeaderComponent {}\n\n/**\n * Rounded message body. Renders an inner `[kjChatBubble]` host (which\n * itself composes `KjVariant` + `KjSize` via `hostDirectives`) so\n * `data-variant`, `data-size`, and `data-tail` land on the visible bubble\n * element where the CSS expects them. The bubble does not provide DI\n * tokens to descendants, so projecting through an inner template does not\n * break any injection chain.\n *\n * Variant / size are typed at the wrapper layer for IDE autocomplete; they\n * widen to `string` at the directive layer where they are validated against\n * `KJ_CHAT_BUBBLE_CONFIG` in dev mode.\n * @doc\n * @doc-name chat\n */\n@Component({\n selector: 'kj-chat-bubble',\n standalone: true,\n imports: [KjChatBubble],\n template: `\n <p\n kjChatBubble\n class=\"kj-chat-bubble\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjChatBubbleNoTail]=\"kjChatBubbleNoTail()\"\n >\n <ng-content />\n </p>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjChatBubbleComponent {\n /** Visual register. Validated against `KJ_CHAT_BUBBLE_CONFIG`. */\n readonly kjVariant = input<KjChatBubbleVariant>('default');\n /** Density preset. Drives padding + font-size on the bubble. */\n readonly kjSize = input<KjChatBubbleSize>('md');\n /** Suppresses the tail unconditionally. Auto-suppression on grouped rows is independent. */\n readonly kjChatBubbleNoTail = input(false);\n}\n\n/**\n * Read-state footer. Composes `KjChatFooter` so the directive mints an id,\n * registers it with the parent row for `aria-describedby`, reflects\n * `kjState` to `data-state`, and injects an `aria-label` so the glyph is\n * intelligible to AT.\n * @doc\n * @doc-name chat\n */\n@Component({\n selector: 'kj-chat-footer',\n standalone: true,\n hostDirectives: [\n {\n directive: KjChatFooter,\n inputs: ['kjState'],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-chat-footer' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjChatFooterComponent {}\n\nexport type { KjChatRole, KjChatSide, KjChatState };\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, viewChild, ElementRef } from '@angular/core';\nimport { KjCheckbox } from '@kouji-ui/core';\n\nlet checkboxIdCounter = 0;\n\n/**\n * Styled wrapper around the headless `KjCheckbox` directive.\n *\n * The host renders a `<label>` wrapping the checkbox box and any projected\n * content (label text). Clicking anywhere on the label checks/unchecks the\n * box. When `disabled` is set, both the box and label text dim via\n * `[data-disabled]` on the host.\n *\n * @doc-example Default\n * The default checkbox bound to a `signal<boolean>` via `[(checked)]`.\n * @doc-file checkbox.default.example.ts\n * @doc-example Usage\n * A walkthrough of the most common checkbox usages — checked binding,\n * indeterminate parent, size variants, and disabled.\n * @doc-file checkbox.usage.example.ts\n * @doc-example Checked\n * Pre-selected on first render. Two-way bind to persist user changes.\n * @doc-file checkbox.checked.example.ts\n * @doc-example Indeterminate\n * Tri-state \"some-of-many\" parent for a select-all row.\n * @doc-file checkbox.indeterminate.example.ts\n * @doc-example Disabled\n * `[disabled]=\"true\"` dims the box + label and removes pointer events.\n * @doc-file checkbox.disabled.example.ts\n *\n * @doc-keyboard\n * Space — Toggles the checked state\n * Tab — Moves focus to the next focusable element\n *\n * @doc-aria\n * role=\"checkbox\" — Applied to the inner focusable box by the headless directive\n * aria-checked — Reflects `true`, `false`, or `\"mixed\"` for indeterminate\n * aria-disabled — Reflected when `[disabled]` is true\n * aria-labelledby — Auto-wired to the projected label span\n * data-disabled — Mirrors the disabled posture for theme/scope hooks\n * data-indeterminate — Reflects the indeterminate posture for the dash glyph\n *\n * @doc-css-var\n * --kj-checkbox-size — Box edge length. `data-size=\"sm|lg\"` overrides; default 1rem.\n * --kj-checkbox-bg — Unchecked background fill. Defaults to --kj-bg-body.\n * --kj-checkbox-bg-checked — Background when checked or indeterminate. Defaults to --kj-bg-primary.\n * --kj-checkbox-fg-checked — Checkmark/dash color. Defaults to --kj-fg-on-primary.\n * --kj-checkbox-border — Border color when unchecked. Defaults to --kj-border-default.\n * --kj-checkbox-radius — Corner radius of the box. Inherits --kj-radius-selector.\n *\n * @doc-touch\n * The wrapping label is the click target — its width plus the `lg` size keeps\n * the touch surface ≥ 44×44px. For dense form rows, `sm` / `md` rely on the\n * inline-text-link exception (WCAG 2.5.5).\n *\n * @doc-a11y\n * The visible label and the box share a single click region — the label\n * forwards taps to the inner focusable span (which is the actual checkbox\n * per the WAI-ARIA Checkbox pattern). Focus is restricted to the box;\n * `:focus-visible` shows a 2px ring. Indeterminate is a presentation-only\n * tri-state — committing to a value still flips between checked/unchecked.\n *\n * @doc-related toggle,radio,field\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name checkbox\n * @doc-description Themed checkbox with label, indeterminate state, and size variants for use in forms.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-checkbox',\n standalone: true,\n imports: [KjCheckbox],\n template: `\n <!-- Click-region wrapper. The focusable element is the inner kjCheckbox span\n (role=\"checkbox\", tabindex, Space handler); this div only proxies pointer\n events from the label area, so the lint rules below don't apply. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div class=\"kj-checkbox-inner\" (click)=\"onLabelClick($event)\">\n <span\n #box\n kjCheckbox\n tabindex=\"0\"\n class=\"kj-checkbox-box\"\n [(kjChecked)]=\"checked\"\n [kjDisabled]=\"disabled()\"\n [attr.data-size]=\"size()\"\n [attr.data-indeterminate]=\"indeterminate() ? '' : null\"\n [attr.aria-labelledby]=\"labelId\"\n ></span>\n <span class=\"kj-checkbox-label\" [id]=\"labelId\"><ng-content /></span>\n </div>\n `,\n styleUrl: './checkbox.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-checkbox',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCheckboxComponent {\n readonly checked = model<boolean>(false);\n readonly disabled = input(false);\n readonly indeterminate = input(false);\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n\n protected readonly labelId = `kj-checkbox-${++checkboxIdCounter}`;\n\n private readonly box = viewChild.required<ElementRef<HTMLElement>>('box');\n\n /** Forward label-area clicks to the checkbox box. The box itself bubbles\n * through, so we early-return to avoid a double-toggle. */\n protected onLabelClick(e: MouseEvent): void {\n if (this.disabled()) return;\n const boxEl = this.box().nativeElement;\n const target = e.target as Node;\n if (target === boxEl || boxEl.contains(target)) return;\n boxEl.click();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n input,\n output,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport {\n KjColorPicker,\n KjColorPickerAlphaSlider,\n KjColorPickerArea,\n KjColorPickerHueSlider,\n KjColorPickerInput,\n KjColorPickerPanel,\n KjColorPickerTrigger,\n type KjColorFormat,\n type KjColorPreset,\n type KjColorValue,\n} from '@kouji-ui/core';\n\n/**\n * Styled color-picker. Wraps the headless `KjColorPicker` family with a\n * popover panel containing the saturation/value area, hue slider,\n * optional alpha slider, hex input, and preset palette.\n *\n * Two-way bind through Angular forms:\n *\n * ```html\n * <kj-color-picker [(ngModel)]=\"brand\" kjFormat=\"hex\" kjShowAlpha />\n * ```\n *\n * @doc-example Default\n * Hex output, no alpha, no presets — the simplest two-way binding.\n * @doc-file color-picker.example.ts\n * @doc-example Usage\n * A walkthrough of the most common color-picker usages — hex output, an\n * alpha channel, brand presets, and Angular forms.\n * @doc-file color-picker.usage.example.ts\n * @doc-example With presets\n * A brand palette projected via `[kjPresets]` for one-click selection.\n * @doc-file color-picker.with-presets.example.ts\n * @doc-example With alpha\n * `kjShowAlpha` mounts the alpha slider and switches to 8-char hex output.\n * @doc-file color-picker.alpha.example.ts\n * @doc-example Hex input\n * The free-form hex text input inside the panel, validated on Enter / blur.\n * @doc-file color-picker.hex-input.example.ts\n * @doc-example In a form\n * Bound via `[formControl]` inside a reactive form alongside other fields.\n * @doc-file color-picker.in-form.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Opens the panel from the swatch trigger\n * ArrowLeft|ArrowRight — Steps the hue or alpha slider when focused\n * ArrowUp|ArrowDown — Steps the saturation/value crosshair when the area is focused\n * Tab — Moves focus into and through the panel; cycles back to the trigger\n * Escape — Closes the panel and restores focus to the trigger\n *\n * @doc-aria\n * aria-label — Provided on the trigger; override with `[kjAriaLabel]`\n * aria-haspopup — \"dialog\" on the trigger button\n * aria-expanded — Reflects open / closed state on the trigger\n * aria-invalid — Reflected on the panel hex input when the typed value fails to parse\n * role — \"listbox\" on the preset row; \"option\" + `aria-selected` per swatch\n *\n * @doc-css-var\n * --kj-color-picker-current — Hex of the currently-selected color (no alpha). Used to paint the trigger swatch and the alpha-slider gradient.\n *\n * @doc-touch\n * The trigger swatch is 44×44px — meets WCAG 2.5.5 out of the box. Preset\n * chips are 24×24px and rely on the inline-control exception inside the\n * panel.\n *\n * @doc-a11y\n * The picker is a real combobox + popover — the trigger button has\n * `aria-haspopup=\"dialog\"` and `aria-expanded`, the panel is mounted on the\n * body to escape clipping, and focus returns to the trigger on close.\n * `ControlValueAccessor` is wired so `[(ngModel)]` and `[formControl]` work\n * directly on `<kj-color-picker>` — the inner directive owns the canonical\n * accessor and we delegate.\n *\n * @doc-related input,form,field\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name color-picker\n * @doc-description Themed color picker with saturation canvas, hue and alpha sliders, hex input, and preset swatches.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-color-picker',\n standalone: true,\n imports: [\n KjColorPicker,\n KjColorPickerTrigger,\n KjColorPickerPanel,\n KjColorPickerArea,\n KjColorPickerHueSlider,\n KjColorPickerAlphaSlider,\n KjColorPickerInput,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: KjColorPickerComponent,\n multi: true,\n },\n ],\n template: `\n <div\n kjColorPicker\n #root=\"kjColorPicker\"\n [kjFormat]=\"kjFormat()\"\n [kjShowAlpha]=\"kjShowAlpha()\"\n [kjAlwaysEmitAlpha]=\"kjAlwaysEmitAlpha()\"\n [kjPresets]=\"kjPresets()\"\n [kjInvalid]=\"kjInvalid()\"\n [kjAriaLabel]=\"kjAriaLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n (kjOpenChange)=\"kjOpenChange.emit($event)\"\n (kjCommit)=\"kjCommit.emit($event)\"\n >\n <button\n type=\"button\"\n kjColorPickerTrigger\n class=\"kj-color-picker-trigger\"\n aria-label=\"Open color picker\"\n ></button>\n <div kjColorPickerPanel class=\"kj-color-picker-panel\">\n <div kjColorPickerArea class=\"kj-color-picker-area\"></div>\n <input kjColorPickerHueSlider class=\"kj-color-picker-hue-slider\" />\n @if (kjShowAlpha()) {\n <input\n kjColorPickerAlphaSlider\n class=\"kj-color-picker-alpha-slider\"\n [style.--kj-color-picker-current]=\"opaqueCurrent(root)\"\n />\n }\n @if (kjShowHexInput()) {\n <input kjColorPickerInput class=\"kj-color-picker-input\" />\n }\n @if (kjPresets().length > 0) {\n <div role=\"listbox\" aria-label=\"Preset colors\" class=\"kj-color-picker-presets\">\n @for (preset of kjPresets(); track preset.value) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"kj-color-picker-preset\"\n [attr.aria-label]=\"preset.label ?? preset.value\"\n [attr.aria-selected]=\"preset.value.toLowerCase() === root.hex().toLowerCase() ? 'true' : 'false'\"\n [style.background]=\"preset.value\"\n (click)=\"selectPreset(root, preset)\"\n ></button>\n }\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './color-picker.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-color-picker',\n style: 'display: inline-block;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjColorPickerComponent implements ControlValueAccessor {\n /** Output format. Default `'hex'`. */\n readonly kjFormat = input<KjColorFormat>('hex');\n /** Mount the alpha slider and switch to 8-char hex output when α<1. */\n readonly kjShowAlpha = input(false, { transform: booleanAttribute });\n /** Force 8-char hex output even when α=1. */\n readonly kjAlwaysEmitAlpha = input(false);\n /** Brand-palette preset swatches. Empty array hides the preset row. */\n readonly kjPresets = input<readonly KjColorPreset[]>([]);\n /** Touched-gated invalid posture; mirrors `KjInput`. */\n readonly kjInvalid = input(false);\n /** Override the default \"Color picker\" name on the trigger. */\n readonly kjAriaLabel = input<string>('');\n /** Mirror the headless `KjDisabled` posture. */\n readonly kjDisabled = input(false);\n /** Show or hide the hex text input within the default panel layout. */\n readonly kjShowHexInput = input<boolean>(true);\n\n /** Fires when the panel transitions between open and closed. */\n readonly kjOpenChange = output<boolean>();\n /** Fires when the user commits a color (panel close, hex Enter, preset click). */\n readonly kjCommit = output<KjColorValue>();\n\n @ViewChild(KjColorPicker, { static: true })\n protected innerPicker?: KjColorPicker;\n\n /**\n * Opaque-only current hex (no alpha digits). Used as the alpha-slider\n * track's gradient end-stop so users see \"current → transparent\" at full\n * saturation regardless of the active alpha value.\n */\n protected opaqueCurrent(root: KjColorPicker): string {\n const rgb = root.rgb();\n const toHex = (n: number) => Math.round(Math.max(0, Math.min(255, n)))\n .toString(16).padStart(2, '0');\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`;\n }\n\n /** @internal */\n protected selectPreset(root: KjColorPicker, preset: KjColorPreset): void {\n root.setHex(preset.value);\n }\n\n // ── ControlValueAccessor ──────────────────────────────────────────\n // Re-expose the inner directive's CVA so consumers can bind `[formControl]`\n // / `[(ngModel)]` directly on `<kj-color-picker>`. The inner KjFormControl\n // is the canonical accessor — we just delegate.\n\n writeValue(val: unknown): void {\n this.innerPicker?.formCtrl.writeValue(val);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.innerPicker?.formCtrl.registerOnChange(fn);\n }\n registerOnTouched(fn: () => void): void {\n this.innerPicker?.formCtrl.registerOnTouched(fn);\n }\n setDisabledState(isDisabled: boolean): void {\n this.innerPicker?.formCtrl.setDisabledState(isDisabled);\n }\n}\n\n// Re-export types so consumers don't need a second import path.\nexport type { KjColorFormat, KjColorPreset, KjColorValue };\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core';\nimport {\n KjCombobox,\n KjComboboxInput,\n KjComboboxListbox,\n KjComboboxOption,\n} from '@kouji-ui/core';\n\n/**\n * Combobox / autocomplete root component.\n *\n * A typeable input bound to a filterable listbox. The default mode runs a\n * synchronous case-insensitive substring filter against the projected\n * `<kj-combobox-option>` children. Set `[shouldFilter]=\"false\"` and bind\n * `(queryChange)` for async / consumer-driven flows. Set `[freeText]=\"true\"`\n * to let the user commit arbitrary typed values that are not in the option\n * set (e.g. a tags input).\n *\n * @doc-example Default — country picker\n * Country picker with built-in synchronous substring filtering.\n * @doc-file combobox.example.ts\n * @doc-example Usage\n * A walkthrough of the most common combobox usages — sync filtering,\n * placeholder, value binding, and disabled.\n * @doc-file combobox.usage.example.ts\n * @doc-example Async search\n * Consumer-driven filtering via `(queryChange)` for remote results.\n * @doc-file combobox.async.example.ts\n * @doc-example Free-text values\n * `[freeText]=\"true\"` accepts arbitrary typed input not in the option set.\n * @doc-file combobox.free-text.example.ts\n * @doc-example Empty state\n * `<kj-combobox-empty>` slot for the \"no matches\" message.\n * @doc-file combobox.empty-state.example.ts\n * @doc-example With icons\n * Each option projects a leading icon next to the label text.\n * @doc-file combobox.with-icons.example.ts\n *\n * @doc-keyboard\n * ArrowDown — Opens the listbox; moves to the next option when open\n * ArrowUp — Moves to the previous option (wraps at the top)\n * Home|End — Jumps to the first / last visible option\n * Enter — Selects the active option (or commits the typed value when `freeText`)\n * Escape — Closes the listbox and clears the active option\n * Tab — Closes the listbox and continues focus\n * Printable keys — Filter the listbox in real-time\n *\n * @doc-aria\n * role=\"combobox\" — On the input (via `[kjComboboxInput]`)\n * aria-haspopup — \"listbox\" on the input\n * aria-expanded — Reflects open / closed state\n * aria-controls — Links the input to the listbox id\n * aria-activedescendant — Tracks the currently-active option without moving DOM focus\n * aria-busy — Reflected on the input when `[loading]=\"true\"`\n * role=\"option\" — On each `<kj-combobox-option>`\n * aria-selected — Mirrors which option matches the committed value\n *\n * @doc-css-var\n * --kj-bg-field — Input background. Inherited from the theme.\n * --kj-border-default — Input and listbox border color.\n * --kj-bg-elevated — Listbox panel background.\n * --kj-radius-field — Input and listbox corner radius.\n *\n * @doc-touch\n * The input grows with its container — pair with a `lg` size from your form\n * row for ≥ 44px touch height. Options reach 44px via padding plus the\n * inline-text-link exception inside the listbox.\n *\n * @doc-a11y\n * The combobox follows the WAI-ARIA Combobox + Listbox pattern. The input\n * keeps focus; the active option is tracked via `aria-activedescendant`\n * without moving DOM focus into the listbox. The listbox auto-mounts to\n * `document.body` to escape clipping and re-anchors to the input. The\n * `<kj-combobox-empty>` slot uses `role=\"status\"` with `aria-live=\"polite\"`\n * so screen readers announce the no-results state.\n *\n * @doc-related select,command-palette,field\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name combobox\n * @doc-description Themed autocomplete combobox with built-in filtering, async search support, and free-text mode.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-combobox',\n standalone: true,\n hostDirectives: [\n {\n directive: KjCombobox,\n inputs: [\n 'kjValue: value',\n 'kjQuery: query',\n 'kjShouldFilter: shouldFilter',\n 'kjLoading: loading',\n 'kjFreeText: freeText',\n 'kjFilter: filter',\n 'kjAutoActivateFirst: autoActivateFirst',\n ],\n outputs: [\n 'kjValueChange: valueChange',\n 'kjQueryChange: queryChange',\n 'kjCommit: commit',\n ],\n },\n ],\n imports: [KjComboboxInput, KjComboboxListbox],\n template: `\n <input\n kjComboboxInput\n #trig=\"kjComboboxInput\"\n class=\"kj-combobox-input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled() || null\" />\n <div kjComboboxListbox [kjFor]=\"trig\" class=\"kj-combobox-listbox\">\n <ng-content />\n </div>\n `,\n styleUrl: './combobox.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-combobox',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjComboboxComponent {\n /** Placeholder text shown in the input when empty. */\n readonly placeholder = input<string>('');\n /** Whether the combobox is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Single combobox option. Project as a child of `<kj-combobox>`.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name combobox\n */\n@Component({\n selector: 'kj-combobox-option',\n standalone: true,\n imports: [KjComboboxOption],\n template: `<button type=\"button\" kjComboboxOption [kjOptionValue]=\"value()\" class=\"kj-combobox-option\" [disabled]=\"disabled() || null\"><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjComboboxOptionComponent {\n /** Value committed when this option is selected. */\n readonly value = input.required<unknown>();\n /** Whether this option is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Empty-state slot rendered when no options match the query. Place inside\n * `<kj-combobox>`.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name combobox\n */\n@Component({\n selector: 'kj-combobox-empty',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-combobox-empty',\n 'role': 'status',\n 'aria-live': 'polite',\n '[attr.hidden]': 'shouldShow() ? null : \"\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjComboboxEmptyComponent {\n private readonly cb = inject(KjCombobox);\n /** @internal */\n shouldShow(): boolean {\n return this.cb.open()\n && !this.cb.loading()\n && this.cb.visibleCount() === 0\n && this.cb.query().length > 0;\n }\n}\n\n/**\n * Loading-state slot rendered while `loading=true`. Place inside `<kj-combobox>`.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name combobox\n */\n@Component({\n selector: 'kj-combobox-loading',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-combobox-loading',\n 'role': 'status',\n 'aria-live': 'polite',\n '[attr.hidden]': 'cb.loading() ? null : \"\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjComboboxLoadingComponent {\n /** @internal */\n readonly cb = inject(KjCombobox);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport {\n KjConfirmPopup,\n KjConfirmPopupAction,\n KjConfirmPopupCancel,\n KjConfirmPopupContent,\n KjConfirmPopupMessage,\n KjConfirmPopupTrigger,\n KjPopoverContent,\n type KjOverlayTriggerLike,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjConfirmPopup` state-container\n * directive. Composes the core directive via `hostDirectives` and forwards\n * every confirm-popup input under its `kj`-prefixed name. The host renders\n * with `display: contents` so it never interferes with the consumer's layout.\n *\n * Pair with `<kj-confirm-popup-trigger>` for the activator (typically the\n * destructive button) and `<kj-confirm-popup-content>` (placed inside an\n * `<ng-template>`) for the floating panel.\n *\n * @doc\n * @doc-name confirm-popup\n * @doc-is-main\n * @doc-example Default\n * The simplest anchored confirmation — a trigger button with a yes/no panel.\n * @doc-file confirm-popup.example.ts\n * @doc-example Usage\n * A walkthrough of the most common confirm-popup usages — destructive and\n * benign variants with `(kjResult)` handling.\n * @doc-file confirm-popup.usage.example.ts\n * @doc-example Destructive\n * `[kjDestructive]=\"true\"` tints the action button and announces an `alertdialog`.\n * @doc-file confirm-popup.destructive.example.ts\n * @doc-example With message\n * A descriptive paragraph projected as the panel's accessible description.\n * @doc-file confirm-popup.with-message.example.ts\n * @doc-example Placement\n * Anchor side and offset overrides for tight layouts.\n * @doc-file confirm-popup.placement.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Opens the popup from the trigger\n * Escape — Closes the popup, resolves `false`, restores focus to the trigger\n * Tab — Cycles between the cancel and action buttons (focus trap)\n * Shift+Tab — Cycles backward\n *\n * @doc-aria\n * role — \"alertdialog\" when destructive, \"dialog\" otherwise\n * aria-modal — \"true\" while open\n * aria-labelledby — Wire to the heading id when you project one\n * aria-describedby — Auto-wired to the `<kj-confirm-popup-message>` id\n * data-state — Reflects \"open\" / \"closed\" for animation hooks\n *\n * @doc-css-var\n * --kj-confirm-popup-bg — Panel background fill. Defaults to --kj-bg-elevated.\n * --kj-confirm-popup-fg — Foreground text color. Defaults to --kj-fg-default.\n * --kj-confirm-popup-border-color — Border color around the panel. Defaults to --kj-border-default.\n * --kj-confirm-popup-radius — Corner radius of the panel. Inherits --kj-radius-box.\n * --kj-confirm-popup-padding-x — Horizontal inset of panel content.\n * --kj-confirm-popup-padding-y — Vertical inset of panel content.\n * --kj-confirm-popup-shadow — Box shadow under the floating panel. Defaults to --kj-shadow-md.\n *\n * @doc-touch\n * The trigger inherits its host button's touch target. The action and cancel\n * buttons should use `kj-button` `size=\"md\"` or larger (≥ 44px) per WCAG 2.5.5.\n *\n * @doc-a11y\n * Built on the WAI-ARIA `alertdialog` pattern. Cancel receives initial focus\n * by default (WCAG 3.3.4 *Error Prevention*) — flip via `[kjDefaultFocus]`.\n * Focus is trapped inside the panel while open and restored to the trigger\n * on dismiss. Outside-clicks and Escape both resolve the popup with `false`,\n * so consumers can treat any dismissal as cancellation.\n *\n * @doc-related dialog,popover,tooltip\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup',\n standalone: true,\n // Only forward inputs that KjConfirmPopup declares DIRECTLY (not those\n // inherited through its own nested hostDirectives [KjPopover]). Angular\n // cannot chain nested hostDirectives input forwarding.\n hostDirectives: [\n {\n directive: KjConfirmPopup,\n inputs: [\n 'kjDestructive',\n 'kjDefaultFocus',\n ],\n outputs: [\n 'kjConfirmed',\n 'kjCancelled',\n 'kjResult',\n ],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-confirm-popup',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupComponent {}\n\n/**\n * Styled wrapper around `KjConfirmPopupTrigger`.\n *\n * Place inside a `<kj-confirm-popup>` for the compound shape, or use it\n * standalone with `[kjConfirmPopupTriggerFor]` pointing at an `<ng-template>`\n * containing the popup content for the flat trigger-for shape.\n *\n * The host renders with `display: contents` so the projected `<button>` (or\n * `<kj-button>`) is the actual interactive trigger and inherits the\n * directive's ARIA wiring (`aria-haspopup=\"dialog\"`, `aria-expanded`,\n * `aria-controls`).\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup-trigger',\n standalone: true,\n hostDirectives: [KjConfirmPopupTrigger],\n template: `<ng-content />`,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-confirm-popup-trigger',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupTriggerComponent {}\n\n/**\n * Styled wrapper around the structural `KjConfirmPopupContent` directive.\n *\n * Place inside an `<ng-template>` (compound shape) or referenced via\n * `[kjConfirmPopupTriggerFor]` (flat shape). The wrapper renders an inner\n * `<ng-template kjPopoverContent kjConfirmPopupContent>` and forwards the\n * projected content into the portal-mounted overlay panel —\n * `role=\"alertdialog\"` and the family's keyboard / outside-click coordination\n * come from the underlying directives.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup-content',\n standalone: true,\n imports: [KjPopoverContent, KjConfirmPopupContent],\n template: `\n <kj-popover-content [kjFor]=\"kjFor()\" kjConfirmPopupContent [class]=\"resolvedPanelClass()\">\n <ng-content />\n </kj-popover-content>\n `,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-confirm-popup-content-host',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupContentComponent {\n /** Anchor — the `[kjConfirmPopupTrigger]` template reference. */\n readonly kjFor = input.required<KjOverlayTriggerLike>();\n /** Optional class hook for the body-level overlay container. */\n readonly kjPanelClass = input<string | string[]>('');\n\n /**\n * Always include the `kj-confirm-popup-content` class on the panel so the\n * styled wrapper CSS lands on the floating box. Consumer-provided classes\n * are concatenated.\n */\n readonly resolvedPanelClass = computed<string>(() => {\n const out: string[] = ['kj-confirm-popup-content'];\n const c = this.kjPanelClass();\n if (Array.isArray(c)) {\n for (const v of c) if (v) out.push(v);\n } else if (c) {\n out.push(c);\n }\n return out.join(' ');\n });\n}\n\n/**\n * Marks the message body inside `<kj-confirm-popup-content>`. Generates an\n * auto-id and registers it with the popup so `aria-describedby` on the panel\n * is wired automatically. Required for accessibility (WAI-ARIA `alertdialog`\n * pattern requires a description).\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup-message',\n standalone: true,\n hostDirectives: [KjConfirmPopupMessage],\n template: `<ng-content />`,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-confirm-popup-message' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupMessageComponent {}\n\n/**\n * Confirm action button slot. Click resolves the popup with `true`, emits\n * `(kjConfirmed)` on the parent `<kj-confirm-popup>`. The styled wrapper\n * adds the `kj-confirm-popup-action` class — pair with `<kj-button>` for\n * the destructive variant when the popup is destructive.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup-action',\n standalone: true,\n hostDirectives: [KjConfirmPopupAction],\n template: `<ng-content />`,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-confirm-popup-action',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupActionComponent {}\n\n/**\n * Cancel action button slot. Click resolves the popup with `false`, emits\n * `(kjCancelled)` on the parent `<kj-confirm-popup>`. Receives initial focus\n * by default — WCAG 3.3.4 *Error Prevention*.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup-cancel',\n standalone: true,\n hostDirectives: [KjConfirmPopupCancel],\n template: `<ng-content />`,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-confirm-popup-cancel',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupCancelComponent {}\n\n/**\n * Convenience container for the action button row. Pure styling hook — the\n * semantic comes from the `<kj-confirm-popup-action>` and\n * `<kj-confirm-popup-cancel>` slots inside.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-confirm-popup-actions',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './confirm-popup.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-confirm-popup-actions' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjConfirmPopupActionsComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n model,\n} from '@angular/core';\nimport {\n KjDatePicker,\n KjDatePickerCalendar,\n KjDatePickerTrigger,\n} from '@kouji-ui/core';\nimport { KjCalendarComponent } from '../calendar/calendar';\n\n/**\n * Styled Date Picker. Pairs a typed `<input>` with a popover calendar for\n * single-date selection.\n *\n * Native `Date` only — locale-aware formatting and parsing via\n * `Intl.DateTimeFormat`. The input is the focusable form control; the toggle\n * button to its right opens the calendar; clicking a day cell commits the\n * value and closes the popover.\n *\n * **Accessibility (WCAG 2.1 AAA):**\n * - input has `role=\"combobox\"` + `aria-haspopup=\"dialog\"` + `aria-expanded`\n * + `aria-controls` per APG combobox+dialog pattern.\n * - panel has `role=\"dialog\"` and `aria-modal=\"false\"` (non-modal popup —\n * Esc + outside-click close, focus restored to the input on close).\n * - keyboard: ArrowDown / Alt+ArrowDown opens; Escape closes; Enter parses\n * and commits typed text. Inside the calendar, the full APG day-grid\n * keyboard contract applies.\n *\n * @doc-example Default\n * Typed input plus a popover calendar bound to a `signal<Date>`.\n * @doc-file date-picker.example.ts\n * @doc-example Usage\n * A walkthrough of the most common date-picker usages — two-way binding,\n * min / max bounds, and a read-only field.\n * @doc-file date-picker.usage.example.ts\n * @doc-example Min / max bounds\n * `[kjMin]` / `[kjMax]` block out-of-range days in the calendar.\n * @doc-file date-picker.with-min-max.example.ts\n * @doc-example Disabled dates\n * `[kjDisabledDates]` predicate disables individual cells (e.g. weekends).\n * @doc-file date-picker.disabled-dates.example.ts\n * @doc-example Locale\n * `kjLocale=\"fr-FR\"` flips formatting, parsing, and first day of week.\n * @doc-file date-picker.locale.example.ts\n * @doc-example Read-only\n * `[kjReadonly]=\"true\"` displays the value but blocks typing and selection.\n * @doc-file date-picker.readonly.example.ts\n *\n * @doc-keyboard\n * ArrowDown|Alt+ArrowDown — Opens the calendar popover from the input\n * Escape — Closes the popover and restores focus to the input\n * Enter — Parses the typed value and commits it (or selects the focused day in the calendar)\n * ArrowLeft|ArrowRight — In the calendar, moves the focused day by 1\n * ArrowUp|ArrowDown — In the calendar, moves the focused day by 7 (one week)\n * PageUp|PageDown — In the calendar, moves the focused day by 1 month\n * Home|End — In the calendar, jumps to the first / last day of the week\n *\n * @doc-aria\n * role=\"combobox\" — On the input\n * aria-haspopup — \"dialog\" on the input\n * aria-expanded — Reflects open / closed state\n * aria-controls — Links the input to the calendar dialog id\n * role=\"dialog\" — On the panel; `aria-modal=\"false\"` (non-modal popup)\n * role=\"grid\" — On the day grid (inherited from `<kj-calendar>`)\n *\n * @doc-css-var\n * --kj-date-picker-input-height — Input height. `data-size=\"sm|lg\"` overrides; default 2.25rem.\n *\n * @doc-touch\n * The default 2.25rem (36px) input relies on the inline-control exception\n * inside form rows. Use `kjSize=\"lg\"` on the host (or override\n * `--kj-date-picker-input-height`) to reach the full 44px touch target.\n *\n * @doc-a11y\n * Follows the APG combobox + dialog pattern — the input is the focusable\n * form control, the popover is non-modal (Esc / outside-click close), and\n * focus is restored to the input on close. Min / max / disabled-dates\n * predicates apply to both keyboard navigation and pointer selection.\n *\n * @doc-related calendar,time-picker,field\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name date-picker\n * @doc-description Themed single-date picker pairing a typed input with a popover calendar and locale-aware parsing.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-date-picker',\n standalone: true,\n imports: [\n KjDatePicker,\n KjDatePickerTrigger,\n KjDatePickerCalendar,\n KjCalendarComponent,\n ],\n template: `\n <div\n kjDatePicker\n class=\"kj-date-picker\"\n #picker=\"kjDatePicker\"\n [attr.data-size]=\"kjSize() === 'md' ? null : kjSize()\"\n [kjValue]=\"kjValue() ?? null!\"\n (kjValueChange)=\"kjValue.set($event)\"\n [(kjOpen)]=\"kjOpen\"\n [kjMin]=\"kjMin() ?? null!\"\n [kjMax]=\"kjMax() ?? null!\"\n [kjDisabledDates]=\"kjDisabledDates() ?? null!\"\n [kjLocale]=\"kjLocale()\"\n [kjFirstDayOfWeek]=\"kjFirstDayOfWeek() ?? 0\"\n [kjReadonly]=\"kjReadonly()\"\n [kjDisabled]=\"kjDisabled()\"\n >\n <input\n kjDatePickerTrigger\n #trig=\"kjDatePickerTrigger\"\n class=\"kj-date-picker__input\"\n [placeholder]=\"kjPlaceholder()\"\n />\n <div\n kjDatePickerCalendar\n [kjFor]=\"trig\"\n class=\"kj-date-picker__panel\"\n >\n <kj-calendar\n [(kjValue)]=\"kjValue\"\n [kjMin]=\"kjMin()\"\n [kjMax]=\"kjMax()\"\n [kjDisabledDates]=\"kjDisabledDates()\"\n [kjLocale]=\"kjLocale()\"\n [kjFirstDayOfWeek]=\"kjFirstDayOfWeek() ?? 0\"\n (kjValueChange)=\"onCalendarSelect($event, picker)\"\n />\n </div>\n </div>\n `,\n styleUrl: './date-picker.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-date-picker-host', style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjDatePickerComponent {\n /** Currently selected date. Two-way bindable — `[(kjValue)]`. `null` clears. */\n readonly kjValue = model<Date | null>(null);\n\n /** Two-way bindable open state for the popover. */\n readonly kjOpen = model<boolean>(false);\n\n /** Earliest selectable date (inclusive). `null` = open. */\n readonly kjMin = input<Date | null>(null);\n\n /** Latest selectable date (inclusive). `null` = open. */\n readonly kjMax = input<Date | null>(null);\n\n /** Per-date predicate; `false` disables the cell. */\n readonly kjDisabledDates = input<((d: Date) => boolean) | null>(null);\n\n /** BCP-47 locale tag. Defaults to Angular's `LOCALE_ID`. */\n readonly kjLocale = input<string>('');\n\n /** First day of the week override (0=Sun … 6=Sat). */\n readonly kjFirstDayOfWeek = input<number | null>(null);\n\n /** Placeholder text for the input. */\n readonly kjPlaceholder = input<string>('');\n\n /** Read-only — value displays but cannot be edited. */\n readonly kjReadonly = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n\n /** Disable the entire picker. */\n readonly kjDisabled = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n\n /** Size tier — matches `KjInput`. `xs` (28px) for filter rows / inline editors. */\n readonly kjSize = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n\n /** @internal — wired from the projected calendar. */\n onCalendarSelect(date: Date | null, picker: KjDatePicker): void {\n if (date) picker.selectDate(date);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nexport {\n KjDialog,\n KjDialogService,\n KjDialogRef,\n type KjDialogOpenOptions,\n} from '@kouji-ui/core';\n\n/**\n * Service-launched modal dialog. Inject `KjDialogService` and call `open()`\n * with a template; mount `[kjDialog]` once near your trigger to host the\n * panel. The wrapper component exists purely to give the dialog suite a\n * dedicated documentation page.\n *\n * @doc-keyboard\n * Escape — Closes the dialog (only the topmost overlay receives Escape when nested)\n * Tab — Cycles focus within the dialog (focus trap via `tabCycle({ returnFocus: true })`)\n * Shift+Tab — Cycles focus backward, wrapping at the first focusable element\n *\n * @doc-aria\n * role — \"dialog\" by default; the service sets \"alertdialog\" when opened with `alert: true`\n * aria-modal — \"true\" when a backdrop with `inertSiblings` is active (the default for modal dialogs)\n * aria-labelledby — wire to the id of your `<kj-dialog-title>` so the dialog has an accessible name\n * aria-describedby — wire to the id of your description node when the title alone is not sufficient\n *\n * @doc-touch\n * The dialog surface itself is not a touch target. Footer action buttons should use `size=\"lg\"` (44px) to meet WCAG 2.5.5 — the confirmation, scrollable, and with-form examples follow this pattern.\n *\n * @doc-a11y\n * Focus is trapped inside the dialog while it is open and returned to the\n * triggering element on close (`returnFocus: true`). Siblings outside the\n * dialog are marked `inert` while it is open, so assistive tech sees only\n * the dialog tree. When stacking dialogs (nested overlays), only the topmost\n * overlay receives Escape and outside-click, preventing accidental dismissal\n * of background dialogs. The wrapper does not generate an accessible name —\n * you must provide one via `aria-labelledby` (pointing to a visible heading)\n * or `aria-label`.\n *\n * @doc-related drawer,popover,confirm-popup\n *\n * @doc\n * @doc-name dialog\n * @doc-is-main\n * @doc-example Default\n * The simplest service-launched dialog — open a body component from a button.\n * @doc-file dialog.default.example.ts\n * @doc-example Usage\n * A walkthrough of the most common dialog usages — open a confirmation and\n * resolve through `afterClosed$`.\n * @doc-file dialog.usage.example.ts\n * @doc-example Confirmation\n * Yes/no confirmation with a typed result via `KjDialogRef<T, R>`.\n * @doc-file dialog.confirmation.example.ts\n * @doc-example Scrollable\n * Long bodies scroll inside the panel while the header / footer stay pinned.\n * @doc-file dialog.scrollable.example.ts\n * @doc-example With form\n * A reactive form lives inside the panel; submit closes with the value.\n * @doc-file dialog.with-form.example.ts\n * @doc-example Nested overlays\n * Open another dialog from inside a dialog — only the topmost gets Escape.\n * @doc-file dialog.nested.example.ts\n *\n * @doc-css-var\n * --kj-bg-elevated — Panel background fill. Inherited from the theme.\n * --kj-radius-box — Panel corner radius. Inherited from the theme.\n * --kj-shadow-lg — Box shadow under the panel. Inherited from the theme.\n * --kj-space-xl — Default panel padding.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-dialog-shell',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './dialog.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjDialogComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nexport {\n KjDrawer,\n KjDrawerService,\n KjDrawerRef,\n type KjDrawerOpenOptions,\n type KjDrawerSide,\n} from '@kouji-ui/core';\n\n/**\n * Service-launched drawer (edge-anchored panel). Inject `KjDrawerService` and\n * call `open()` with a template; the drawer absorbs the bottom-sheet pattern\n * via `kjSide=\"bottom\"` plus drag options. The wrapper exists to host the\n * documentation page for the drawer suite.\n *\n * @doc\n * @doc-name drawer\n * @doc-is-main\n * @doc-example Default\n * Service-launched drawer that slides in from the right.\n * @doc-file drawer.example.ts\n * @doc-example Usage\n * A walkthrough of the most common drawer usages — open from a button,\n * change the slide side, and resolve a result back to the opener.\n * @doc-file drawer.usage.example.ts\n * @doc-example Sides\n * `kjSide` toggles between left / right / top / bottom (bottom = sheet).\n * @doc-file drawer.sides.example.ts\n * @doc-example Modal vs non-modal\n * Toggle the backdrop / inert posture for full-screen vs companion panels.\n * @doc-file drawer.modal-vs-non-modal.example.ts\n * @doc-example Scrollable\n * Long body scrolls inside the panel while the header / footer stay pinned.\n * @doc-file drawer.scrollable.example.ts\n * @doc-example With form\n * A reactive form lives inside the panel; submit closes with the value.\n * @doc-file drawer.with-form.example.ts\n *\n * @doc-keyboard\n * Escape — Closes the drawer (only the topmost overlay when stacked)\n * Tab — Cycles focus within the drawer (focus trap via `tabCycle({ returnFocus: true })`)\n * Shift+Tab — Cycles backward\n *\n * @doc-aria\n * role — \"dialog\" by default; an `aria-modal=\"true\"` while backdrop is active\n * aria-labelledby — Wire to the heading id when you project one\n * aria-describedby — Wire to a description node if the heading is not sufficient\n * data-state — \"open\" / \"closed\" — drives the slide-in transform\n * data-kj-side — Mirrors the resolved side for theme/scope hooks\n *\n * @doc-css-var\n * --kj-drawer-bg — Panel background fill. Defaults to --kj-bg-elevated.\n * --kj-drawer-fg — Foreground text color. Defaults to --kj-fg-default.\n * --kj-drawer-border-color — Color of the edge-facing border. Defaults to --kj-border-default.\n * --kj-drawer-shadow — Box shadow off the panel. Defaults to --kj-shadow-lg.\n * --kj-drawer-size — Panel width (left/right) or height (top/bottom). Defaults to 22rem.\n *\n * @doc-touch\n * The panel itself is not a touch target. Header / footer action buttons\n * should use `kj-button` `size=\"lg\"` (≥ 44px) per WCAG 2.5.5. Bottom sheets\n * (`kjSide=\"bottom\"`) gain a drag handle when `drag: true` is passed.\n *\n * @doc-a11y\n * Focus is trapped inside the drawer while open and returned to the\n * triggering element on close (`returnFocus: true`). Siblings outside the\n * drawer are marked `inert` while a modal drawer is open. Stacking is safe —\n * only the topmost overlay receives Escape and outside-click. The wrapper\n * does not generate an accessible name; provide one via `aria-labelledby`\n * (pointing to a visible heading) or `aria-label`.\n *\n * @doc-related dialog,popover,confirm-popup\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-drawer-shell',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './drawer.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjDrawerComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport {\n KjDropdownMenuTrigger,\n KjDropdownMenuContent,\n KjDropdownMenuItem,\n KjDropdownMenuSeparator,\n KjDropdownMenuLabel,\n KjDropdownMenuGroup,\n} from '@kouji-ui/core';\n\n// Re-exports of the new overlay-primitive dropdown-menu API. Absorbs the\n// context-menu (use `kjTrigger=\"contextmenu\"`) and inline-menu\n// (use `kjMount=\"inline\"`) into a single API surface.\nexport {\n KjDropdownMenuTrigger,\n KjDropdownMenuContent,\n KjDropdownMenuItem,\n KjDropdownMenuSeparator,\n KjDropdownMenuLabel,\n KjDropdownMenuGroup,\n KJ_DROPDOWN_MENU,\n type KjDropdownMenuContext,\n type KjDropdownMenuTriggerKind,\n type KjDropdownMenuMount,\n type KjDropdownMenuCloseReason,\n} from '@kouji-ui/core';\n\n/**\n * Dropdown menu suite. Compose `[kjDropdownMenuTrigger]` + `<kj-dropdown-menu-content [kjFor]=\"t\">`\n * with `[kjDropdownMenuItem]` rows, `[kjDropdownMenuSeparator]` dividers, and\n * `[kjDropdownMenuLabel]` headings. The wrapper itself only projects content —\n * its purpose is to host the documentation page for the suite.\n *\n * @doc-keyboard\n * Enter|Space — Opens the menu from the trigger; activates the focused menu item when open\n * ArrowDown — Moves focus to the next menu item (roving tabindex)\n * ArrowUp — Moves focus to the previous menu item\n * Home — Moves focus to the first menu item\n * End — Moves focus to the last menu item\n * Escape — Closes the menu and returns focus to the trigger (only the topmost overlay receives Escape when nested)\n * Tab — Closes the menu and continues focus to the next focusable element\n *\n * @doc-aria\n * aria-haspopup — set to \"menu\" on the trigger button\n * aria-expanded — set on the trigger; reflects open/closed state\n * aria-controls — links the trigger to the panel id\n * role=\"menu\" — on the content panel (provided via KJ_OVERLAY_PANEL_ROLE)\n * role=\"menuitem\" — on each `[kjDropdownMenuItem]`\n * data-disabled — set on items when [kjDisabled] is true (uses ARIA-disabled, not native, so items stay focusable)\n *\n * @doc-css-var\n * --kj-dropdown-menu-bg — Panel background fill. Defaults to --kj-bg-elevated.\n * --kj-dropdown-menu-fg — Panel foreground color. Defaults to --kj-fg-default.\n * --kj-dropdown-menu-border-color — Panel border color. Defaults to --kj-border-default.\n * --kj-dropdown-menu-radius — Panel corner radius. Inherits --kj-radius-box.\n * --kj-dropdown-menu-padding — Inner padding of the panel. Defaults to --kj-space-xs.\n * --kj-dropdown-menu-shadow — Box shadow under the panel. Defaults to --kj-shadow-md.\n * --kj-dropdown-menu-item-padding-x — Horizontal padding inside each menu item.\n * --kj-dropdown-menu-item-padding-y — Vertical padding inside each menu item.\n * --kj-dropdown-menu-item-min-height — Minimum row height. 2.75rem keeps WCAG 2.5.5 (44px).\n * --kj-dropdown-menu-item-radius — Per-item corner radius. Inherits --kj-radius-field.\n * --kj-dropdown-menu-item-hover-bg — Hover background fill for items.\n * --kj-dropdown-menu-item-active-bg — Pressed/active background fill for items.\n * --kj-dropdown-menu-item-current-bg — Background fill when aria-current is true.\n * --kj-dropdown-menu-item-current-fg — Foreground color when aria-current is true.\n *\n * @doc-touch\n * Menu items enforce `min-height: 2.75rem` (44px) via CSS to meet WCAG 2.5.5 — every item is a valid touch target out of the box, regardless of label length.\n *\n * @doc-a11y\n * The menu follows the WAI-ARIA Menu pattern. Items use a roving tabindex\n * inside the panel, so the menu is a single Tab stop. Disabled items use\n * ARIA-disabled (not the native attribute) and intercept click events in the\n * capture phase — they remain focusable and discoverable. The panel\n * portal-mounts to `document.body` by default to escape clipping ancestors;\n * use `kjMount=\"inline\"` to keep the panel as a sibling of the trigger when\n * you need it inside a transformed/clipped parent. For context-menu use,\n * set `kjTrigger=\"contextmenu\"` and `kjMount=\"point\"` to anchor at the pointer\n * coordinates rather than the trigger element.\n *\n * @doc-related menubar,command-palette,popover\n *\n * @doc\n * @doc-name dropdown-menu\n * @doc-is-main\n * @doc-example Default\n * A trigger button with a three-row dropdown menu.\n * @doc-file dropdown-menu.example.ts\n * @doc-example Usage\n * A walkthrough of the most common dropdown usages — labelled group, a\n * separator, and a disabled item.\n * @doc-file dropdown-menu.usage.example.ts\n * @doc-example Sides\n * `kjPlacement` flips the panel above / below / start / end the trigger.\n * @doc-file dropdown-menu.sides.example.ts\n * @doc-example With icons\n * Each item projects a leading icon next to its label.\n * @doc-file dropdown-menu.with-icons.example.ts\n * @doc-example With separator\n * Group related items with `[kjDropdownMenuSeparator]` rules.\n * @doc-file dropdown-menu.with-separator.example.ts\n * @doc-example Shortcuts\n * Inline `kbd` chips that mirror the global hotkey for each row.\n * @doc-file dropdown-menu.shortcuts.example.ts\n * @doc-example Disabled\n * `[kjDisabled]=\"true\"` keeps the item focusable but blocks activation.\n * @doc-file dropdown-menu.disabled.example.ts\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-dropdown-menu',\n standalone: true,\n imports: [\n KjDropdownMenuTrigger,\n KjDropdownMenuContent,\n KjDropdownMenuItem,\n KjDropdownMenuSeparator,\n KjDropdownMenuLabel,\n KjDropdownMenuGroup,\n ],\n template: `<ng-content />`,\n styleUrl: './dropdown-menu.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjDropdownMenuComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n} from '@angular/core';\nimport { KjSize, KJ_SIZE_PRESET } from '@kouji-ui/core';\n\nconst KJ_EMPTY_STATE_SIZE_PRESET = {\n values: ['sm', 'md', 'lg'],\n default: 'md',\n};\n\n/** Tonal variant for the empty state. */\nexport type KjEmptyStateVariant = 'neutral' | 'error';\n\n/** Live-region politeness setting. `false` opts out entirely. */\nexport type KjEmptyStateLive = false | 'polite' | 'assertive';\n\n/** Heading level for `<kj-empty-state-title>`. */\nexport type KjEmptyStateLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/**\n * Placeholder shown in place of a list, table, feed, or detail panel when\n * there is no data to display — never-populated, search-no-results, or a\n * contained error. Components-only family with no headless directive in\n * `@kouji-ui/core`: the visual contract is \"centre four things\", and the\n * a11y contract (when to live-announce, with which role) is one input on\n * the root component.\n *\n * Compose with `<kj-empty-state-icon>`, `<kj-empty-state-title>`,\n * `<kj-empty-state-description>`, and `<kj-empty-state-actions>` for the\n * standard layout. All four sub-components are optional.\n *\n * Variants:\n * - `neutral` (default) — \"no data yet\", \"no results\", any non-error empty.\n * - `error` — \"we couldn't load this\" with retry affordance.\n *\n * Live region:\n * - `kjLive=false` (default) — no role; appropriate for initial-render\n * never-populated empties read in document flow.\n * - `kjLive='polite'` — `role=\"status\"` (neutral) for search-no-results\n * that appear in response to user action.\n * - `kjLive='assertive'` — `role=\"alert\"` (error) for runtime failures\n * that demand the user's attention now.\n *\n * @example\n * ```html\n * <kj-empty-state>\n * <kj-empty-state-icon>📁</kj-empty-state-icon>\n * <kj-empty-state-title>No projects yet</kj-empty-state-title>\n * <kj-empty-state-description>Create your first project to get started.</kj-empty-state-description>\n * <kj-empty-state-actions>\n * <kj-button>Create project</kj-button>\n * </kj-empty-state-actions>\n * </kj-empty-state>\n * ```\n * @doc-example Default\n * Never-populated case — neutral variant with no `kjLive`.\n * @doc-file empty-state.example.ts\n * @doc-example Usage\n * A walkthrough of the most common empty-state usages — never-populated\n * neutral, search-no-results polite, and assertive error.\n * @doc-file empty-state.usage.example.ts\n * @doc-example Error\n * `kjVariant=\"error\"` + `kjLive=\"assertive\"` for runtime load failures.\n * @doc-file empty-state.error.example.ts\n * @doc-example No search results\n * Search-no-results pattern with a polite live announcement.\n * @doc-file empty-state.search.example.ts\n * @doc-example Sizes\n * `kjSize=\"sm\"` / `md` / `lg` — drives padding, icon size, and font sizes.\n * @doc-file empty-state.sizes.example.ts\n * @doc-example With secondary actions\n * Primary + secondary action rows (the secondary stack appears beneath).\n * @doc-file empty-state.with-actions.example.ts\n *\n * @doc-aria\n * role — Derived from `kjLive` + `kjVariant`: `alert` for error+live, `status` for neutral+live, none otherwise\n * aria-live — `assertive` for the error variant, `polite` for neutral, omitted when `kjLive=false`\n * aria-atomic — `\"true\"` whenever a live region is active so the full message re-announces\n * aria-label — Forwarded from `[kjEmptyStateLabel]` when provided\n * aria-hidden — `\"true\"` on the icon slot — the meaning lives in the title / description\n *\n * @doc-css-var\n * --kj-empty-state-bg — Background fill. Defaults to transparent so the surface inherits.\n * --kj-empty-state-fg — Title and primary text color. Defaults to --kj-fg-default.\n * --kj-empty-state-muted-fg — Description and icon tint. Defaults to --kj-fg-muted.\n * --kj-empty-state-accent — Accent color used for the error variant icon.\n * --kj-empty-state-padding-y — Vertical padding around the centered stack. Sizes override.\n * --kj-empty-state-padding-x — Horizontal padding around the centered stack. Sizes override.\n * --kj-empty-state-gap — Gap between icon, title, description, and actions.\n * --kj-empty-state-icon-size — Edge length of the icon slot. Sizes override (2/3/4.5rem).\n * --kj-empty-state-title-size — Title font size. Sizes override.\n * --kj-empty-state-desc-size — Description font size. Sizes override.\n * --kj-empty-state-max-width — Max width for title and description blocks. Defaults to 32rem.\n *\n * @doc-a11y\n * The component is purely visual until `kjLive` is set. Initial-render\n * never-populated empties read in flow without a live region (`kjLive=false`).\n * Search-no-results — `kjLive=\"polite\"` so AT announces the new state without\n * interrupting. Errors — `kjLive=\"assertive\"` for failures that demand\n * immediate attention. Pick a heading level on `<kj-empty-state-title>` that\n * matches the empty state's depth in the outline.\n *\n * @doc-related alert,toast,skeleton\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name empty-state\n * @doc-description Themed placeholder surface for no-data, no-results, or error scenarios with title, description, and actions.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-empty-state',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './empty-state.css',\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [{ directive: KjSize, inputs: ['kjSize'] }],\n providers: [\n { provide: KJ_SIZE_PRESET, useValue: KJ_EMPTY_STATE_SIZE_PRESET },\n ],\n host: {\n 'class': 'kj-empty-state',\n '[attr.data-variant]': 'kjVariant()',\n '[attr.role]': 'role()',\n '[attr.aria-live]': 'ariaLive()',\n '[attr.aria-atomic]': 'ariaAtomic()',\n '[attr.aria-label]': 'kjEmptyStateLabel() ?? null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjEmptyStateComponent {\n /** Tonal variant — `'neutral'` (default) or `'error'`. Reflects to `data-variant`. */\n readonly kjVariant = input<KjEmptyStateVariant>('neutral');\n\n /**\n * Live-region politeness. `false` (default) renders no role. `'polite'`\n * yields `role=\"status\"`; `'assertive'` yields `role=\"alert\"`. The\n * derived role also depends on `kjVariant`: an error variant with any\n * truthy `kjLive` becomes `role=\"alert\"`; a neutral variant with truthy\n * `kjLive` becomes `role=\"status\"`.\n */\n readonly kjLive = input<KjEmptyStateLive>(false);\n\n /** Optional `aria-label` override. Defaults to `undefined` (no override). */\n readonly kjEmptyStateLabel = input<string | undefined>(undefined);\n\n protected readonly role = computed(() => {\n if (!this.kjLive()) return null;\n return this.kjVariant() === 'error' ? 'alert' : 'status';\n });\n\n protected readonly ariaLive = computed(() => {\n const live = this.kjLive();\n if (!live) return null;\n return this.kjVariant() === 'error' ? 'assertive' : 'polite';\n });\n\n protected readonly ariaAtomic = computed(() => (this.kjLive() ? 'true' : null));\n}\n\n/**\n * Decorative icon / illustration slot. Always `aria-hidden=\"true\"` — the\n * accessible meaning lives in `<kj-empty-state-title>` and\n * `<kj-empty-state-description>`. Consumers project an `<svg>`, an icon\n * component, or an `<img>`.\n * @doc\n * @doc-name empty-state\n */\n@Component({\n selector: 'kj-empty-state-icon',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-empty-state-icon',\n 'aria-hidden': 'true',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjEmptyStateIconComponent {}\n\n/**\n * Title slot. Renders an `<hN>` element where `N` is `kjLevel` (default `3`).\n * Pick the level that matches the empty state's depth in the document\n * outline — full-page placements want `1` or `2`; deep card-body\n * placements want `4` or higher.\n * @doc\n * @doc-name empty-state\n */\n@Component({\n selector: 'kj-empty-state-title',\n standalone: true,\n template: `\n @switch (kjLevel()) {\n @case (1) { <h1 class=\"kj-empty-state-title\"><ng-content /></h1> }\n @case (2) { <h2 class=\"kj-empty-state-title\"><ng-content /></h2> }\n @case (4) { <h4 class=\"kj-empty-state-title\"><ng-content /></h4> }\n @case (5) { <h5 class=\"kj-empty-state-title\"><ng-content /></h5> }\n @case (6) { <h6 class=\"kj-empty-state-title\"><ng-content /></h6> }\n @default { <h3 class=\"kj-empty-state-title\"><ng-content /></h3> }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjEmptyStateTitleComponent {\n /** Heading level rendered for the title. Defaults to `3`. */\n readonly kjLevel = input<KjEmptyStateLevel>(3);\n}\n\n/**\n * Description slot. Renders a `<p>` containing the projected text. May\n * contain inline `<a kjLink>` for \"browse all items\" / \"contact support\"\n * style affordances.\n * @doc\n * @doc-name empty-state\n */\n@Component({\n selector: 'kj-empty-state-description',\n standalone: true,\n template: `<p class=\"kj-empty-state-description\"><ng-content /></p>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjEmptyStateDescriptionComponent {}\n\n/**\n * Actions slot. Renders a flex row of projected buttons / links, with an\n * optional secondary row underneath for tertiary affordances (\"contact\n * support\", \"learn more\"). Project secondary actions via the\n * `[secondary]` attribute selector.\n *\n * @example\n * ```html\n * <kj-empty-state-actions>\n * <kj-button>Create project</kj-button>\n * <a kjLink secondary href=\"/help\">Learn more</a>\n * </kj-empty-state-actions>\n * ```\n * @doc\n * @doc-name empty-state\n */\n@Component({\n selector: 'kj-empty-state-actions',\n standalone: true,\n template: `\n <div class=\"kj-empty-state-actions__primary\">\n <ng-content />\n </div>\n <div class=\"kj-empty-state-actions__secondary\">\n <ng-content select=\"[secondary]\" />\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-empty-state-actions',\n '[attr.data-has-secondary]': 'kjHasSecondary() ? \"\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjEmptyStateActionsComponent {\n /**\n * When `true`, lays out the secondary slot beneath the primary row in\n * smaller type. Defaults to `false`. Set declaratively when projecting\n * `[secondary]` content; the CSS `:has()` rule also handles the visual\n * fallback for consumers that omit the flag.\n */\n readonly kjHasSecondary = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n KjField,\n KjFieldError,\n KjFieldGroup,\n KjFieldHelp,\n KjFieldLabel,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjField` directive family.\n *\n * Renders a vertical stack of label, control slot, and helper / error\n * messages. The inner control should be projected as a child element with\n * the `kjField`-aware id binding (the wrapper exposes `controlId` via the\n * `KjField` host directive) — `kj-field-label` resolves `for=`\n * automatically and the wrapper composes `aria-describedby` from any\n * `kj-field-help` and `kj-field-error` siblings.\n *\n * @doc-example Default\n * Label + input + help text — anchors the default chrome with auto-wired\n * id and `aria-describedby` plumbing.\n * @doc-file field.example.ts\n * @doc-example Usage\n * Common field shapes — required, with help, with error, and a prefix/suffix\n * group — assembled into one screen as a copy-paste starting point.\n * @doc-file field.usage.example.ts\n * @doc-example With error\n * `[kjInvalid]=\"true\"` flips the label tone and links the `kj-field-error`\n * id into the input's `aria-describedby`.\n * @doc-file field.with-error.example.ts\n * @doc-example Required\n * `[kjRequired]=\"true\"` paints the asterisk and sets `aria-required` on the\n * underlying input.\n * @doc-file field.required.example.ts\n * @doc-example Disabled\n * `[kjDisabled]=\"true\"` dims the row and propagates `disabled` to the\n * projected control.\n * @doc-file field.disabled.example.ts\n * @doc-example Prefix and suffix\n * Wraps the input in `<kj-field-group>` with `[prefix]` / `[suffix]` slots\n * for currency symbols, units, or inline actions.\n * @doc-file field.with-prefix-suffix.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus to the projected control inside the field\n *\n * @doc-aria\n * aria-describedby — Auto-composed from any kj-field-help / kj-field-error siblings via controlId / describedByIds\n * aria-invalid — Reflected on the projected control when [kjInvalid] is true\n * aria-required — Reflected on the projected control when [kjRequired] is true\n * data-disabled — Mirrors [kjDisabled] for theme CSS\n * data-invalid — Mirrors [kjInvalid] for theme CSS\n *\n * @doc-touch\n * The field itself is not a touch target — the projected control sets the\n * hit area. Pair with `kj-input` / `kj-input-otp` / etc. sized for ≥ 44×44 px.\n *\n * @doc-a11y\n * `KjField` owns the id wiring: `controlId()` provides a stable id for the\n * projected control, and `describedByIds()` aggregates the ids of any\n * `kj-field-help` and `kj-field-error` siblings so consumers can pipe them\n * straight into `aria-describedby`. Label association is automatic when\n * the projected control consumes `controlId()`.\n *\n * @doc-related input,form,input-group\n *\n * @doc-css-var\n * --kj-field-gap — Vertical gap between label, control, and help/error rows.\n * --kj-field-label-fg — Label color. Flips to the error tone when the field is invalid.\n * --kj-field-label-font — Label font family. Inherits --kj-font-sans.\n * --kj-field-label-font-size — Label font size. Defaults to --kj-text-sm.\n * --kj-field-label-weight — Label font weight. Default 500.\n * --kj-field-help-fg — Help / description text color. Muted by default.\n * --kj-field-help-font-size — Help / description text size. Defaults to --kj-text-xs.\n * --kj-field-error-fg — Error text color and invalid-label color.\n * --kj-field-error-font-size — Error text size. Defaults to --kj-text-xs.\n * --kj-field-required-fg — Color of the required asterisk.\n * --kj-field-disabled-opacity — Opacity applied when the field is disabled.\n * --kj-field-group-bg — Background fill for the inline group (input + prefix/suffix).\n * --kj-field-group-fg — Foreground color inside the group.\n * --kj-field-group-border-color — Border color of the group; focus/invalid retarget this.\n * --kj-field-group-radius — Corner radius of the group. Inherits --kj-radius-field.\n * --kj-field-group-addon-fg — Foreground color of prefix/suffix addons.\n * --kj-field-group-addon-bg — Background fill of prefix/suffix addons.\n * --kj-field-group-padding-x — Horizontal padding inside addons.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name field\n * @doc-description Themed form field wrapper that auto-wires label, help, error, and required/invalid/disabled state.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-field',\n standalone: true,\n hostDirectives: [\n {\n directive: KjField,\n inputs: [\n 'kjFieldOrientation',\n 'kjRequired',\n 'kjDisabled',\n 'kjInvalid',\n 'kjFieldId',\n 'kjFieldLabelId',\n ],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './field.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-field',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFieldComponent {}\n\n/**\n * Styled wrapper around `KjFieldLabel`.\n * @doc-category Library/Data input\n * @doc\n * @doc-name field\n */\n@Component({\n selector: 'kj-field-label',\n standalone: true,\n imports: [KjFieldLabel],\n template: `\n <!-- The label is associated via [attr.for] set on it by KjFieldLabel from\n the field's controlId signal — the static analyzer can't see that. -->\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->\n <label kjFieldLabel class=\"kj-field-label\"><ng-content /></label>\n `,\n styleUrl: './field.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFieldLabelComponent {}\n\n/**\n * Styled wrapper around `KjFieldHelp`.\n * @doc-category Library/Data input\n * @doc\n * @doc-name field\n */\n@Component({\n selector: 'kj-field-help',\n standalone: true,\n imports: [KjFieldHelp],\n template: `<span kjFieldHelp class=\"kj-field-help\"><ng-content /></span>`,\n styleUrl: './field.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFieldHelpComponent {}\n\n/**\n * Styled wrapper around `KjFieldError`.\n * @doc-category Library/Data input\n * @doc\n * @doc-name field\n */\n@Component({\n selector: 'kj-field-error',\n standalone: true,\n imports: [KjFieldError],\n template: `<span kjFieldError class=\"kj-field-error\"><ng-content /></span>`,\n styleUrl: './field.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFieldErrorComponent {}\n\n/**\n * Styled wrapper around `KjFieldGroup`. Lays out an input with optional\n * leading / trailing addons (icons, units, action buttons) as a single\n * visual control.\n *\n * Project addons via the `prefix` and `suffix` content slots:\n *\n * @example\n * ```html\n * <kj-field-group>\n * <span prefix>$</span>\n * <input kjInput type=\"number\" />\n * <span suffix>USD</span>\n * </kj-field-group>\n * ```\n * @doc-category Library/Data input\n * @doc\n * @doc-name field\n */\n@Component({\n selector: 'kj-field-group',\n standalone: true,\n imports: [KjFieldGroup],\n template: `\n <div kjFieldGroup class=\"kj-field-group\">\n <span class=\"kj-field-group__prefix\" [attr.data-empty]=\"null\">\n <ng-content select=\"[prefix]\" />\n </span>\n <span class=\"kj-field-group__control\">\n <ng-content />\n </span>\n <span class=\"kj-field-group__suffix\">\n <ng-content select=\"[suffix]\" />\n </span>\n </div>\n `,\n styleUrl: './field.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFieldGroupComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n} from '@angular/core';\nimport {\n KjFileUpload,\n KjFileUploadDropzone,\n KjFileUploadItem,\n KjFileUploadList,\n KjFileUploadTrigger,\n KjFileRejection,\n KjUploadableFile,\n KjProgressBar,\n KjProgressBarFill,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper for the headless `KjFileUpload` directive family. Renders\n * the canonical drop-zone + trigger + per-file list shape so consumers don't\n * have to wire the five directives by hand.\n *\n * The component owns the *visible* shape (drop-zone instructional text,\n * file-row layout with thumbnail / name / size / progress / remove). The\n * directives still own the state machine, validation, drag-and-drop, ARIA,\n * and live-region announcements.\n *\n * Per-file progress integrates with `KjProgressBar` (composed via the inner\n * `<div kjProgressBar>`) for `role=\"progressbar\"` semantics. When the\n * consumer wires a real upload (HTTP, signed-URL POST, etc.), they call\n * `setFileStatus(id, status, progress)` on the directive ref to drive the\n * row through `pending → uploading → done`.\n *\n * @example\n * ```html\n * <kj-file-upload kjAccept=\"image/*\" [kjMaxSize]=\"5_000_000\" />\n * ```\n *\n * @doc-example Default (single)\n * A single-file picker with a styled drop-zone and a toolbar trigger.\n * @doc-file file-upload.example.ts\n * @doc-example Usage\n * Common upload shapes — single, multiple with image preview, and a wired\n * simulated progress lifecycle.\n * @doc-file file-upload.usage.example.ts\n * @doc-example Multiple\n * `[kjMultiple]=\"true\"` accepts a batch and renders one row per file.\n * @doc-file file-upload.multiple.example.ts\n * @doc-example Drop-zone\n * Highlights the drag-and-drop affordance with hint text and an accept-list.\n * @doc-file file-upload.dropzone.example.ts\n * @doc-example Simulated upload progress\n * Drives `pending → uploading → done` via `setFileStatus(id, status, progress)`.\n * @doc-file file-upload.with-progress.example.ts\n * @doc-example Image preview\n * `[kjShowPreview]=\"true\"` renders a thumbnail per image file.\n * @doc-file file-upload.image-preview.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus to the drop-zone, then to the trigger button, then to per-row Remove buttons\n * Enter|Space — Activates the drop-zone (opens picker) or the trigger / Remove button\n *\n * @doc-aria\n * role=\"button\" — Set on the drop-zone for keyboard activation\n * aria-label — Drop-zone reads from [kjDropzoneLabel]; Remove buttons read \"Remove <filename> from list\"\n * aria-live — Selection, rejection, and removal are announced via a polite live region\n * role=\"progressbar\"— Per-file progress row when [progress()] is non-null\n * data-status — Mirrors the row's status (preparing/pending/uploading/done/error/cancelled)\n *\n * @doc-touch\n * Drop-zone and trigger render at ≥ 44×44 px to satisfy WCAG 2.5.5. The\n * per-row Remove button uses default `kj-button` chrome — keep it at `md`\n * or larger when it is the primary touch target.\n *\n * @doc-a11y\n * `KjFileUpload` owns the state machine (selection, validation, drag-and-drop,\n * live announcements). The wrapper provides the visible shape but never\n * re-implements the directive's `aria-*` plumbing. Always pair the drop-zone\n * with an explicit `[kjDropzoneLabel]` — that string is both the heading and\n * the accessible name.\n *\n * @doc-css-var\n * --kj-file-upload-bg — Background fill of the drop-zone surface.\n * --kj-file-upload-fg — Foreground (text) color inside the upload.\n * --kj-file-upload-border-color — Drop-zone border color. Drag-over and invalid retarget this.\n * --kj-file-upload-border-style — Drop-zone border style. Defaults to dashed.\n * --kj-file-upload-border-width — Drop-zone border thickness. Inherits --kj-border.\n * --kj-file-upload-radius — Drop-zone corner radius. Inherits --kj-radius-field.\n * --kj-file-upload-padding — Padding inside the drop-zone.\n * --kj-file-upload-row-bg — Background fill for each per-file row.\n * --kj-file-upload-row-border-color — Border color between rows in the list.\n * --kj-file-upload-row-padding-x — Horizontal padding inside each row.\n * --kj-file-upload-row-padding-y — Vertical padding inside each row.\n * --kj-file-upload-thumb-size — Thumbnail square size for image previews.\n * --kj-file-upload-thumb-radius — Thumbnail corner radius.\n *\n * @doc-related field,input,progress-bar\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name file-upload\n * @doc-description Themed file picker with drag-and-drop, multi-file list, per-row progress, image previews, and rejection.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-file-upload',\n standalone: true,\n imports: [\n KjFileUpload,\n KjFileUploadTrigger,\n KjFileUploadDropzone,\n KjFileUploadList,\n KjFileUploadItem,\n KjProgressBar,\n KjProgressBarFill,\n ],\n template: `\n <div\n kjFileUpload\n #upload=\"kjFileUpload\"\n class=\"kj-file-upload\"\n [kjAccept]=\"kjAccept()\"\n [kjMultiple]=\"kjMultiple()\"\n [kjMaxSize]=\"kjMaxSize()\"\n [kjMaxFiles]=\"kjMaxFiles()\"\n [kjDisabled]=\"kjDisabled()\"\n (kjSelect)=\"kjSelect.emit($event)\"\n (kjReject)=\"kjReject.emit($event)\"\n (kjRemove)=\"kjRemove.emit($event)\"\n >\n @if (kjShowDropzone()) {\n <div kjFileUploadDropzone class=\"kj-file-upload__dropzone\" [kjLabel]=\"kjDropzoneLabel()\">\n <strong>{{ kjDropzoneLabel() }}</strong>\n @if (kjDropzoneHint()) {\n <span class=\"kj-file-upload__dropzone-hint\">{{ kjDropzoneHint() }}</span>\n }\n </div>\n }\n <div class=\"kj-file-upload__toolbar\">\n <button\n kjFileUploadTrigger\n type=\"button\"\n class=\"kj-file-upload__trigger\"\n >\n {{ kjTriggerLabel() }}\n </button>\n <ng-content select=\"[kj-file-upload-actions]\" />\n </div>\n\n <ul kjFileUploadList class=\"kj-file-upload__list\">\n @for (f of upload.files(); track f.id) {\n <li\n kjFileUploadItem\n #row=\"kjFileUploadItem\"\n [kjFile]=\"f\"\n class=\"kj-file-upload__row\"\n >\n @if (kjShowPreview() && isImage(f.file)) {\n <img\n class=\"kj-file-upload__thumb\"\n [src]=\"previewUrl(f)\"\n [alt]=\"f.file.name\"\n />\n }\n <div class=\"kj-file-upload__row-body\">\n <div class=\"kj-file-upload__row-meta\">\n <span class=\"kj-file-upload__row-name\" [attr.aria-label]=\"f.file.name\">\n {{ f.file.name }}\n </span>\n <span class=\"kj-file-upload__row-size\">{{ formatSize(f.file.size) }}</span>\n </div>\n @if (row.progress() !== null) {\n <div\n kjProgressBar\n [kjValue]=\"row.progress() ?? 0\"\n class=\"kj-file-upload__progress\"\n [attr.aria-label]=\"'Upload progress for ' + f.file.name\"\n >\n <div kjProgressBarFill class=\"kj-progress-bar__fill\"></div>\n </div>\n }\n <span class=\"kj-file-upload__row-status\">\n {{ statusLabel(row.status()) }}\n @if (f.error) {\n — {{ f.error }}\n }\n </span>\n </div>\n <div class=\"kj-file-upload__row-actions\">\n <span\n class=\"kj-file-upload__row-icon\"\n [attr.data-status]=\"row.status()\"\n [attr.aria-hidden]=\"'true'\"\n ></span>\n <button\n type=\"button\"\n class=\"kj-file-upload__remove\"\n (click)=\"row.remove()\"\n [attr.aria-label]=\"'Remove ' + f.file.name + ' from list'\"\n >\n Remove\n </button>\n </div>\n </li>\n }\n </ul>\n </div>\n `,\n styleUrl: './file-upload.css',\n encapsulation: ViewEncapsulation.None,\n host: { 'style': 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFileUploadComponent implements OnDestroy {\n /** MIME / extension list for the picker. */\n readonly kjAccept = input<string>('');\n\n /** Multiple files. Default `true`. */\n readonly kjMultiple = input(true, { transform: booleanAttribute });\n\n /** Maximum bytes per file. */\n readonly kjMaxSize = input<number>(Number.POSITIVE_INFINITY);\n\n /** Total file count cap. */\n readonly kjMaxFiles = input<number>(Number.POSITIVE_INFINITY);\n\n /** Disables the entire control. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Whether to render the drop-zone (turn off for compact layouts). Default `true`. */\n readonly kjShowDropzone = input(true, { transform: booleanAttribute });\n\n /** Drop-zone accessible name + visible heading. */\n readonly kjDropzoneLabel = input<string>('Drag files here, or click to browse');\n\n /** Optional secondary hint inside the drop-zone (e.g. \"PNG / JPG up to 5 MB\"). */\n readonly kjDropzoneHint = input<string>('');\n\n /** Label for the toolbar trigger button. */\n readonly kjTriggerLabel = input<string>('Choose files');\n\n /** When `true`, image rows render an `<img>` thumbnail via `URL.createObjectURL`. */\n readonly kjShowPreview = input(false, { transform: booleanAttribute });\n\n @Output() readonly kjSelect = new EventEmitter<File[]>();\n @Output() readonly kjReject = new EventEmitter<KjFileRejection[]>();\n @Output() readonly kjRemove = new EventEmitter<KjUploadableFile>();\n\n /** Direct access to the underlying directive — consumers drive simulated uploads via this. */\n @ViewChild(KjFileUpload, { static: true }) readonly upload!: KjFileUpload;\n\n // ─── View helpers ───\n protected readonly isImage = (file: File): boolean => /^image\\//.test(file.type);\n\n /** Cache so `URL.createObjectURL` isn't called repeatedly per change-detection. */\n private readonly previewCache = new Map<string, string>();\n\n protected previewUrl(f: KjUploadableFile): string {\n let url = this.previewCache.get(f.id);\n if (!url) {\n url = URL.createObjectURL(f.file);\n this.previewCache.set(f.id, url);\n }\n return url;\n }\n\n protected formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n }\n\n protected statusLabel(status: string): string {\n switch (status) {\n case 'preparing': return 'Preparing';\n case 'pending': return 'Ready';\n case 'uploading': return 'Uploading';\n case 'done': return 'Done';\n case 'error': return 'Error';\n case 'cancelled': return 'Cancelled';\n default: return status;\n }\n }\n\n ngOnDestroy(): void {\n for (const url of this.previewCache.values()) URL.revokeObjectURL(url);\n this.previewCache.clear();\n }\n\n // Expose the most-useful imperative bits for the simulated-upload examples.\n /** @internal */\n readonly files = computed(() => this.upload?.files() ?? []);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n KjForm,\n KjFormErrorSummary,\n} from '@kouji-ui/core';\n\n/**\n * Styled component-layer wrapper that attaches to a real `<form>` element\n * via the attribute selector `form[kj-form]`. Composes the headless `KjForm`\n * coordinator (submit interception, focus-on-first-error, async submitting,\n * error summary) and applies the `.kj-form` class chrome.\n *\n * Use it as you would any `<form>`: the consumer keeps full control over\n * `[formGroup]` (or `ngForm`) and `formControlName` bindings — they sit in\n * the consumer's template, so projected content works without context\n * gymnastics.\n *\n * Forward-only forwarding: every coordination knob lives on the underlying\n * `KjForm` directive (composed via `hostDirectives`); this wrapper exists\n * solely to stamp the class and own the `<kj-form-summary>` slot.\n *\n * @example\n * ```html\n * <form kj-form [formGroup]=\"form\" (kjSubmit)=\"onSubmit($event)\">\n * <kj-input formControlName=\"email\" />\n * <kj-form-actions>\n * <kj-button kjType=\"submit\">Sign in</kj-button>\n * </kj-form-actions>\n * </form>\n * ```\n * @doc-example Default\n * A login form with email + password — anchors the default chrome and the\n * submit-on-valid plumbing.\n * @doc-file form.example.ts\n * @doc-example Usage\n * Common form shapes — validation summary, reactive form, and an actions\n * row — assembled as a copy-paste starting point.\n * @doc-file form.usage.example.ts\n * @doc-example Validation with summary\n * `<kj-form-summary />` lists invalid controls after a failed submit and\n * focuses on populate.\n * @doc-file form.validation.example.ts\n * @doc-example Async submit\n * `[kjAsyncSubmit]` toggles `[kjSubmitting]` while a promise resolves —\n * wire to a button's `[kjLoading]`.\n * @doc-file form.async-submit.example.ts\n * @doc-example Compound (multiple groups)\n * Multiple `<kj-field>` groups coordinated under a single\n * `<form kj-form>` parent.\n * @doc-file form.compound.example.ts\n *\n * @doc-keyboard\n * Enter — Submits the form when focus is inside any non-multiline control\n * Tab — Moves focus across fields in DOM order\n *\n * @doc-aria\n * role=\"form\" — Native on the underlying <form>\n * aria-live — kj-form-summary uses [kjPoliteness] (default polite) to announce errors\n * aria-busy — Reflected on the form when [kjSubmitting] is true\n * data-submitting — Mirrors [kjSubmitting] for theme CSS\n * data-invalid — Mirrors the form's invalid state for theme CSS\n *\n * @doc-touch\n * The form itself is layout-only; touch-target compliance lives on each\n * projected control (`kj-input`, `kj-button`, etc.).\n *\n * @doc-a11y\n * `KjForm` intercepts submit so the form only fires `(kjSubmit)` when valid,\n * marks all controls as touched, focuses the first invalid control, and\n * optionally scrolls it into view. `<kj-form-summary>` reads the invalid\n * controls live and focuses on populate when configured.\n *\n * @doc-related field,input,button\n *\n * @doc-css-var\n * --kj-form-gap — Vertical gap between projected form rows.\n * --kj-form-actions-gap — Gap between buttons inside the actions row.\n * --kj-form-summary-bg — Background fill for the error summary alert.\n * --kj-form-summary-fg — Foreground text color of the error summary body.\n * --kj-form-summary-accent — Accent color for the summary title and left bar.\n * --kj-form-summary-radius — Corner radius of the error summary block.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name form\n * @doc-description Themed form host with submit interception, focus-on-first-error, async state, and an optional error summary.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-form, form[kj-form]',\n standalone: true,\n hostDirectives: [\n {\n directive: KjForm,\n inputs: [\n 'kjFocusOnError',\n 'kjScrollOnError',\n 'kjScrollBehavior',\n 'kjScrollBlock',\n 'kjMarkAllAsTouchedOnSubmit',\n 'kjResetOnSuccess',\n 'kjAsyncSubmit',\n 'kjSubmitting',\n ],\n outputs: ['kjSubmit', 'kjInvalidSubmit', 'kjSubmittingChange'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './form.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-form' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFormComponent {}\n\n/**\n * Slot for form action buttons (Submit, Cancel, …). Sets `role=\"group\"` and\n * defaults to right-aligned with a `var(--kj-form-actions-gap)` gap. Override\n * alignment via `kjAlign` (`'start' | 'end' | 'center' | 'between'`).\n *\n * @example\n * ```html\n * <kj-form-actions>\n * <kj-button kjVariant=\"ghost\" kjType=\"reset\">Cancel</kj-button>\n * <kj-button kjType=\"submit\">Save</kj-button>\n * </kj-form-actions>\n * ```\n * @doc-category Library/Data input\n * @doc\n * @doc-name form\n */\n@Component({\n selector: 'kj-form-actions',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './form.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-form-actions',\n role: 'group',\n '[attr.aria-label]': 'kjLabel()',\n '[attr.data-align]': 'kjAlign()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFormActionsComponent {\n /** Accessible label for the action group. */\n readonly kjLabel = input<string>('Form actions');\n /** Alignment of the action row. Defaults to `'end'`. */\n readonly kjAlign = input<'start' | 'end' | 'center' | 'between'>('end');\n}\n\n/**\n * Live-region error summary that lists invalid controls after a failed\n * submit. Reads from the parent `<form kj-form>` (via the injected `KjForm`)\n * and renders an accessible alert-shaped block. Hidden when there are no\n * invalid controls.\n *\n * Renders a `data-visible` attribute when there is at least one invalid\n * control, allowing themes to drive show/hide via CSS without an `@if`.\n *\n * @example\n * ```html\n * <form kj-form [formGroup]=\"form\">\n * <kj-form-summary />\n * <kj-input formControlName=\"email\" />\n * <kj-form-actions><kj-button kjType=\"submit\">Save</kj-button></kj-form-actions>\n * </form>\n * ```\n * @doc-category Library/Data input\n * @doc\n * @doc-name form\n */\n@Component({\n selector: 'kj-form-summary',\n standalone: true,\n hostDirectives: [{ directive: KjFormErrorSummary, inputs: ['kjPoliteness', 'kjFocusOnPopulate'] }],\n template: `\n @if (visible()) {\n <p class=\"kj-form-summary__title\">{{ titleFor(invalidControls().length) }}</p>\n <ul class=\"kj-form-summary__list\">\n @for (item of invalidControls(); track item.path) {\n <li>{{ item.label }}</li>\n }\n </ul>\n }\n `,\n styleUrl: './form.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-form-summary',\n '[attr.data-visible]': 'visible() ? \"\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjFormSummaryComponent {\n private readonly form = inject(KjForm, { optional: true });\n private readonly fallbackInvalid = signal<readonly { path: string; label: string }[]>([]);\n\n protected readonly invalidControls = computed(\n () => this.form?.invalidControls() ?? this.fallbackInvalid(),\n );\n protected readonly visible = computed(() => this.invalidControls().length > 0);\n\n protected titleFor(count: number): string {\n return count === 1 ? '1 error in this form' : `${count} errors in this form`;\n }\n}\n","import {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { KJ_ICON_REGISTRY } from '@kouji-ui/core';\nimport * as lucideIcons from 'lucide-static';\n\n/**\n * Encode an SVG string into a `data:` URL fragment safe for use inside a CSS\n * `url(...)` value. Percent-encodes the characters that would otherwise break\n * parsing (`#`, `?`, `<`, `>`, etc.) while leaving the bulk of the SVG\n * human-readable for easier debugging.\n */\nfunction encodeSvgDataUrl(svg: string): string {\n const encoded = svg\n .replace(/\"/g, \"'\")\n .replace(/>\\s+</g, '><')\n .trim()\n .replace(/[\\r\\n\\t]+/g, ' ')\n .replace(/%/g, '%25')\n .replace(/#/g, '%23')\n .replace(/\\?/g, '%3F')\n .replace(/</g, '%3C')\n .replace(/>/g, '%3E');\n return `url(\"data:image/svg+xml;utf8,${encoded}\")`;\n}\n\n/** Convert PascalCase (\"AArrowDown\") → kebab-case (\"a-arrow-down\"). */\nfunction pascalToKebab(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n .toLowerCase();\n}\n\n/** Lazily build the kebab-name → encoded-data-url map once per app. */\nlet _registryEntries: Record<string, string> | null = null;\nfunction buildLucideRegistry(): Record<string, string> {\n if (_registryEntries) return _registryEntries;\n const entries: Record<string, string> = {};\n const map = lucideIcons as unknown as Record<string, string>;\n for (const [pascal, svg] of Object.entries(map)) {\n if (typeof svg !== 'string') continue;\n entries[pascalToKebab(pascal)] = encodeSvgDataUrl(svg);\n }\n _registryEntries = entries;\n return entries;\n}\n\n/**\n * Wire Lucide icons into the kouji icon registry.\n *\n * The full Lucide icon set is bundled once and registered into\n * `KJ_ICON_REGISTRY` at app start, so any kebab-case Lucide name renders\n * synchronously the first time it appears in the DOM.\n *\n * The transferred bundle cost is ~300 KB gzipped for the whole set, which\n * lets us keep the API surface minimal and works identically in dev and\n * production — Vite/esbuild can't reliably code-split per-icon dynamic\n * imports against `lucide-static`'s package layout, so a single static\n * namespace import is the predictable choice.\n *\n * @example\n * ```ts\n * // app.config.ts\n * provideLucideIcons(),\n * ```\n *\n * @doc-example Gallery\n * @doc-file ../icon.gallery.example.ts\n *\n * @doc-css-var\n * --kj-icon — Resolved icon value (url(\"...\") or \"glyph\"). Set by the directive — read by the rendered .kj-icon.\n * --kj-icon-font — Font family for `mode=\"font\"` icons. Set on a parent to wire a pre-loaded icon font.\n * --kj-icon-size-xs — Token size for the `xs` icon scale. Override per theme.\n * --kj-icon-size-sm — Token size for the `sm` icon scale.\n * --kj-icon-size-md — Token size for the `md` icon scale.\n * --kj-icon-size-lg — Token size for the `lg` icon scale.\n * --kj-icon-size-xl — Token size for the `xl` icon scale.\n *\n * @doc-category Library/Icon\n * @doc\n * @doc-name icon\n * @doc-is-main\n * @doc-description Wires the full Lucide icon set into the kouji icon registry — any kebab-case Lucide name renders by name.\n */\nexport function provideLucideIcons(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideEnvironmentInitializer(() => {\n const registry = inject(KJ_ICON_REGISTRY);\n registry.update((m) => ({ ...m, ...buildLucideRegistry() }));\n }),\n ]);\n}\n","// Generated from lucide-static@1.14.0/icon-nodes.json. Do not edit by hand.\n// Re-generate via scripts/generate-lucide-icon-names.mjs.\n\nexport const LUCIDE_ICON_NAMES_RAW: readonly string[] = [\n 'a-arrow-down',\n 'a-arrow-up',\n 'a-large-small',\n 'accessibility',\n 'activity',\n 'air-vent',\n 'airplay',\n 'alarm-clock',\n 'alarm-clock-check',\n 'alarm-clock-minus',\n 'alarm-clock-off',\n 'alarm-clock-plus',\n 'alarm-smoke',\n 'album',\n 'align-center-horizontal',\n 'align-center-vertical',\n 'align-end-horizontal',\n 'align-end-vertical',\n 'align-horizontal-distribute-center',\n 'align-horizontal-distribute-end',\n 'align-horizontal-distribute-start',\n 'align-horizontal-justify-center',\n 'align-horizontal-justify-end',\n 'align-horizontal-justify-start',\n 'align-horizontal-space-around',\n 'align-horizontal-space-between',\n 'align-start-horizontal',\n 'align-start-vertical',\n 'align-vertical-distribute-center',\n 'align-vertical-distribute-end',\n 'align-vertical-distribute-start',\n 'align-vertical-justify-center',\n 'align-vertical-justify-end',\n 'align-vertical-justify-start',\n 'align-vertical-space-around',\n 'align-vertical-space-between',\n 'ambulance',\n 'ampersand',\n 'ampersands',\n 'amphora',\n 'anchor',\n 'angry',\n 'annoyed',\n 'antenna',\n 'anvil',\n 'aperture',\n 'app-window',\n 'app-window-mac',\n 'apple',\n 'archive',\n 'archive-restore',\n 'archive-x',\n 'armchair',\n 'arrow-big-down',\n 'arrow-big-down-dash',\n 'arrow-big-left',\n 'arrow-big-left-dash',\n 'arrow-big-right',\n 'arrow-big-right-dash',\n 'arrow-big-up',\n 'arrow-big-up-dash',\n 'arrow-down',\n 'arrow-down-0-1',\n 'arrow-down-1-0',\n 'arrow-down-a-z',\n 'arrow-down-from-line',\n 'arrow-down-left',\n 'arrow-down-narrow-wide',\n 'arrow-down-right',\n 'arrow-down-to-dot',\n 'arrow-down-to-line',\n 'arrow-down-up',\n 'arrow-down-wide-narrow',\n 'arrow-down-z-a',\n 'arrow-left',\n 'arrow-left-from-line',\n 'arrow-left-right',\n 'arrow-left-to-line',\n 'arrow-right',\n 'arrow-right-from-line',\n 'arrow-right-left',\n 'arrow-right-to-line',\n 'arrow-up',\n 'arrow-up-0-1',\n 'arrow-up-1-0',\n 'arrow-up-a-z',\n 'arrow-up-down',\n 'arrow-up-from-dot',\n 'arrow-up-from-line',\n 'arrow-up-left',\n 'arrow-up-narrow-wide',\n 'arrow-up-right',\n 'arrow-up-to-line',\n 'arrow-up-wide-narrow',\n 'arrow-up-z-a',\n 'arrows-up-from-line',\n 'asterisk',\n 'astroid',\n 'at-sign',\n 'atom',\n 'audio-lines',\n 'audio-waveform',\n 'award',\n 'axe',\n 'axis-3d',\n 'baby',\n 'backpack',\n 'badge',\n 'badge-alert',\n 'badge-cent',\n 'badge-check',\n 'badge-dollar-sign',\n 'badge-euro',\n 'badge-indian-rupee',\n 'badge-info',\n 'badge-japanese-yen',\n 'badge-minus',\n 'badge-percent',\n 'badge-plus',\n 'badge-pound-sterling',\n 'badge-question-mark',\n 'badge-russian-ruble',\n 'badge-swiss-franc',\n 'badge-turkish-lira',\n 'badge-x',\n 'baggage-claim',\n 'balloon',\n 'ban',\n 'banana',\n 'bandage',\n 'banknote',\n 'banknote-arrow-down',\n 'banknote-arrow-up',\n 'banknote-x',\n 'barcode',\n 'barrel',\n 'baseline',\n 'bath',\n 'battery',\n 'battery-charging',\n 'battery-full',\n 'battery-low',\n 'battery-medium',\n 'battery-plus',\n 'battery-warning',\n 'beaker',\n 'bean',\n 'bean-off',\n 'bed',\n 'bed-double',\n 'bed-single',\n 'beef',\n 'beef-off',\n 'beer',\n 'beer-off',\n 'bell',\n 'bell-check',\n 'bell-dot',\n 'bell-electric',\n 'bell-minus',\n 'bell-off',\n 'bell-plus',\n 'bell-ring',\n 'between-horizontal-end',\n 'between-horizontal-start',\n 'between-vertical-end',\n 'between-vertical-start',\n 'biceps-flexed',\n 'bike',\n 'binary',\n 'binoculars',\n 'biohazard',\n 'bird',\n 'birdhouse',\n 'bitcoin',\n 'blend',\n 'blinds',\n 'blocks',\n 'bluetooth',\n 'bluetooth-connected',\n 'bluetooth-off',\n 'bluetooth-searching',\n 'bold',\n 'bolt',\n 'bomb',\n 'bone',\n 'book',\n 'book-a',\n 'book-alert',\n 'book-audio',\n 'book-check',\n 'book-copy',\n 'book-dashed',\n 'book-down',\n 'book-headphones',\n 'book-heart',\n 'book-image',\n 'book-key',\n 'book-lock',\n 'book-marked',\n 'book-minus',\n 'book-open',\n 'book-open-check',\n 'book-open-text',\n 'book-plus',\n 'book-search',\n 'book-text',\n 'book-type',\n 'book-up',\n 'book-up-2',\n 'book-user',\n 'book-x',\n 'bookmark',\n 'bookmark-check',\n 'bookmark-minus',\n 'bookmark-off',\n 'bookmark-plus',\n 'bookmark-x',\n 'boom-box',\n 'bot',\n 'bot-message-square',\n 'bot-off',\n 'bottle-wine',\n 'bow-arrow',\n 'box',\n 'boxes',\n 'braces',\n 'brackets',\n 'brain',\n 'brain-circuit',\n 'brain-cog',\n 'brick-wall',\n 'brick-wall-fire',\n 'brick-wall-shield',\n 'briefcase',\n 'briefcase-business',\n 'briefcase-conveyor-belt',\n 'briefcase-medical',\n 'bring-to-front',\n 'brush',\n 'brush-cleaning',\n 'bubbles',\n 'bug',\n 'bug-off',\n 'bug-play',\n 'building',\n 'building-2',\n 'bus',\n 'bus-front',\n 'cable',\n 'cable-car',\n 'cake',\n 'cake-slice',\n 'calculator',\n 'calendar',\n 'calendar-1',\n 'calendar-arrow-down',\n 'calendar-arrow-up',\n 'calendar-check',\n 'calendar-check-2',\n 'calendar-clock',\n 'calendar-cog',\n 'calendar-days',\n 'calendar-fold',\n 'calendar-heart',\n 'calendar-minus',\n 'calendar-minus-2',\n 'calendar-off',\n 'calendar-plus',\n 'calendar-plus-2',\n 'calendar-range',\n 'calendar-search',\n 'calendar-sync',\n 'calendar-x',\n 'calendar-x-2',\n 'calendars',\n 'camera',\n 'camera-off',\n 'candy',\n 'candy-cane',\n 'candy-off',\n 'cannabis',\n 'cannabis-off',\n 'captions',\n 'captions-off',\n 'car',\n 'car-front',\n 'car-taxi-front',\n 'caravan',\n 'card-sim',\n 'carrot',\n 'case-lower',\n 'case-sensitive',\n 'case-upper',\n 'cassette-tape',\n 'cast',\n 'castle',\n 'cat',\n 'cctv',\n 'cctv-off',\n 'chart-area',\n 'chart-bar',\n 'chart-bar-big',\n 'chart-bar-decreasing',\n 'chart-bar-increasing',\n 'chart-bar-stacked',\n 'chart-candlestick',\n 'chart-column',\n 'chart-column-big',\n 'chart-column-decreasing',\n 'chart-column-increasing',\n 'chart-column-stacked',\n 'chart-gantt',\n 'chart-line',\n 'chart-network',\n 'chart-no-axes-column',\n 'chart-no-axes-column-decreasing',\n 'chart-no-axes-column-increasing',\n 'chart-no-axes-combined',\n 'chart-no-axes-gantt',\n 'chart-pie',\n 'chart-scatter',\n 'chart-spline',\n 'check',\n 'check-check',\n 'check-line',\n 'chef-hat',\n 'cherry',\n 'chess-bishop',\n 'chess-king',\n 'chess-knight',\n 'chess-pawn',\n 'chess-queen',\n 'chess-rook',\n 'chevron-down',\n 'chevron-first',\n 'chevron-last',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'chevrons-down',\n 'chevrons-down-up',\n 'chevrons-left',\n 'chevrons-left-right',\n 'chevrons-left-right-ellipsis',\n 'chevrons-right',\n 'chevrons-right-left',\n 'chevrons-up',\n 'chevrons-up-down',\n 'church',\n 'cigarette',\n 'cigarette-off',\n 'circle',\n 'circle-alert',\n 'circle-arrow-down',\n 'circle-arrow-left',\n 'circle-arrow-out-down-left',\n 'circle-arrow-out-down-right',\n 'circle-arrow-out-up-left',\n 'circle-arrow-out-up-right',\n 'circle-arrow-right',\n 'circle-arrow-up',\n 'circle-check',\n 'circle-check-big',\n 'circle-chevron-down',\n 'circle-chevron-left',\n 'circle-chevron-right',\n 'circle-chevron-up',\n 'circle-dashed',\n 'circle-divide',\n 'circle-dollar-sign',\n 'circle-dot',\n 'circle-dot-dashed',\n 'circle-ellipsis',\n 'circle-equal',\n 'circle-fading-arrow-up',\n 'circle-fading-plus',\n 'circle-gauge',\n 'circle-minus',\n 'circle-off',\n 'circle-parking',\n 'circle-parking-off',\n 'circle-pause',\n 'circle-percent',\n 'circle-pile',\n 'circle-play',\n 'circle-plus',\n 'circle-pound-sterling',\n 'circle-power',\n 'circle-question-mark',\n 'circle-slash',\n 'circle-slash-2',\n 'circle-small',\n 'circle-star',\n 'circle-stop',\n 'circle-user',\n 'circle-user-round',\n 'circle-x',\n 'circuit-board',\n 'citrus',\n 'clapperboard',\n 'clipboard',\n 'clipboard-check',\n 'clipboard-clock',\n 'clipboard-copy',\n 'clipboard-list',\n 'clipboard-minus',\n 'clipboard-paste',\n 'clipboard-pen',\n 'clipboard-pen-line',\n 'clipboard-plus',\n 'clipboard-type',\n 'clipboard-x',\n 'clock',\n 'clock-1',\n 'clock-10',\n 'clock-11',\n 'clock-12',\n 'clock-2',\n 'clock-3',\n 'clock-4',\n 'clock-5',\n 'clock-6',\n 'clock-7',\n 'clock-8',\n 'clock-9',\n 'clock-alert',\n 'clock-arrow-down',\n 'clock-arrow-up',\n 'clock-check',\n 'clock-fading',\n 'clock-plus',\n 'closed-caption',\n 'cloud',\n 'cloud-alert',\n 'cloud-backup',\n 'cloud-check',\n 'cloud-cog',\n 'cloud-download',\n 'cloud-drizzle',\n 'cloud-fog',\n 'cloud-hail',\n 'cloud-lightning',\n 'cloud-moon',\n 'cloud-moon-rain',\n 'cloud-off',\n 'cloud-rain',\n 'cloud-rain-wind',\n 'cloud-snow',\n 'cloud-sun',\n 'cloud-sun-rain',\n 'cloud-sync',\n 'cloud-upload',\n 'cloudy',\n 'clover',\n 'club',\n 'code',\n 'code-xml',\n 'coffee',\n 'cog',\n 'coins',\n 'columns-2',\n 'columns-3',\n 'columns-3-cog',\n 'columns-4',\n 'combine',\n 'command',\n 'compass',\n 'component',\n 'computer',\n 'concierge-bell',\n 'cone',\n 'construction',\n 'contact',\n 'contact-round',\n 'container',\n 'contrast',\n 'cookie',\n 'cooking-pot',\n 'copy',\n 'copy-check',\n 'copy-minus',\n 'copy-plus',\n 'copy-slash',\n 'copy-x',\n 'copyleft',\n 'copyright',\n 'corner-down-left',\n 'corner-down-right',\n 'corner-left-down',\n 'corner-left-up',\n 'corner-right-down',\n 'corner-right-up',\n 'corner-up-left',\n 'corner-up-right',\n 'cpu',\n 'creative-commons',\n 'credit-card',\n 'croissant',\n 'crop',\n 'cross',\n 'crosshair',\n 'crown',\n 'cuboid',\n 'cup-soda',\n 'currency',\n 'cylinder',\n 'dam',\n 'database',\n 'database-backup',\n 'database-search',\n 'database-zap',\n 'decimals-arrow-left',\n 'decimals-arrow-right',\n 'delete',\n 'dessert',\n 'diameter',\n 'diamond',\n 'diamond-minus',\n 'diamond-percent',\n 'diamond-plus',\n 'dice-1',\n 'dice-2',\n 'dice-3',\n 'dice-4',\n 'dice-5',\n 'dice-6',\n 'dices',\n 'diff',\n 'disc',\n 'disc-2',\n 'disc-3',\n 'disc-album',\n 'divide',\n 'dna',\n 'dna-off',\n 'dock',\n 'dog',\n 'dollar-sign',\n 'donut',\n 'door-closed',\n 'door-closed-locked',\n 'door-open',\n 'dot',\n 'download',\n 'drafting-compass',\n 'drama',\n 'drill',\n 'drone',\n 'droplet',\n 'droplet-off',\n 'droplets',\n 'drum',\n 'drumstick',\n 'dumbbell',\n 'ear',\n 'ear-off',\n 'earth',\n 'earth-lock',\n 'eclipse',\n 'egg',\n 'egg-fried',\n 'egg-off',\n 'ellipse',\n 'ellipsis',\n 'ellipsis-vertical',\n 'equal',\n 'equal-approximately',\n 'equal-not',\n 'eraser',\n 'ethernet-port',\n 'euro',\n 'ev-charger',\n 'expand',\n 'external-link',\n 'eye',\n 'eye-closed',\n 'eye-off',\n 'factory',\n 'fan',\n 'fast-forward',\n 'feather',\n 'fence',\n 'ferris-wheel',\n 'file',\n 'file-archive',\n 'file-axis-3d',\n 'file-badge',\n 'file-box',\n 'file-braces',\n 'file-braces-corner',\n 'file-chart-column',\n 'file-chart-column-increasing',\n 'file-chart-line',\n 'file-chart-pie',\n 'file-check',\n 'file-check-corner',\n 'file-clock',\n 'file-code',\n 'file-code-corner',\n 'file-cog',\n 'file-diff',\n 'file-digit',\n 'file-down',\n 'file-exclamation-point',\n 'file-headphone',\n 'file-heart',\n 'file-image',\n 'file-input',\n 'file-key',\n 'file-lock',\n 'file-minus',\n 'file-minus-corner',\n 'file-music',\n 'file-output',\n 'file-pen',\n 'file-pen-line',\n 'file-play',\n 'file-plus',\n 'file-plus-corner',\n 'file-question-mark',\n 'file-scan',\n 'file-search',\n 'file-search-corner',\n 'file-signal',\n 'file-sliders',\n 'file-spreadsheet',\n 'file-stack',\n 'file-symlink',\n 'file-terminal',\n 'file-text',\n 'file-type',\n 'file-type-corner',\n 'file-up',\n 'file-user',\n 'file-video-camera',\n 'file-volume',\n 'file-x',\n 'file-x-corner',\n 'files',\n 'film',\n 'fingerprint-pattern',\n 'fire-extinguisher',\n 'fish',\n 'fish-off',\n 'fish-symbol',\n 'fishing-hook',\n 'fishing-rod',\n 'flag',\n 'flag-off',\n 'flag-triangle-left',\n 'flag-triangle-right',\n 'flame',\n 'flame-kindling',\n 'flashlight',\n 'flashlight-off',\n 'flask-conical',\n 'flask-conical-off',\n 'flask-round',\n 'flip-horizontal-2',\n 'flip-vertical-2',\n 'flower',\n 'flower-2',\n 'focus',\n 'fold-horizontal',\n 'fold-vertical',\n 'folder',\n 'folder-archive',\n 'folder-bookmark',\n 'folder-check',\n 'folder-clock',\n 'folder-closed',\n 'folder-code',\n 'folder-cog',\n 'folder-dot',\n 'folder-down',\n 'folder-git',\n 'folder-git-2',\n 'folder-heart',\n 'folder-input',\n 'folder-kanban',\n 'folder-key',\n 'folder-lock',\n 'folder-minus',\n 'folder-open',\n 'folder-open-dot',\n 'folder-output',\n 'folder-pen',\n 'folder-plus',\n 'folder-root',\n 'folder-search',\n 'folder-search-2',\n 'folder-symlink',\n 'folder-sync',\n 'folder-tree',\n 'folder-up',\n 'folder-x',\n 'folders',\n 'footprints',\n 'forklift',\n 'form',\n 'forward',\n 'frame',\n 'frown',\n 'fuel',\n 'fullscreen',\n 'funnel',\n 'funnel-plus',\n 'funnel-x',\n 'gallery-horizontal',\n 'gallery-horizontal-end',\n 'gallery-thumbnails',\n 'gallery-vertical',\n 'gallery-vertical-end',\n 'gamepad',\n 'gamepad-2',\n 'gamepad-directional',\n 'gauge',\n 'gavel',\n 'gem',\n 'georgian-lari',\n 'ghost',\n 'gift',\n 'git-branch',\n 'git-branch-minus',\n 'git-branch-plus',\n 'git-commit-horizontal',\n 'git-commit-vertical',\n 'git-compare',\n 'git-compare-arrows',\n 'git-fork',\n 'git-graph',\n 'git-merge',\n 'git-merge-conflict',\n 'git-pull-request',\n 'git-pull-request-arrow',\n 'git-pull-request-closed',\n 'git-pull-request-create',\n 'git-pull-request-create-arrow',\n 'git-pull-request-draft',\n 'glass-water',\n 'glasses',\n 'globe',\n 'globe-lock',\n 'globe-off',\n 'globe-x',\n 'goal',\n 'gpu',\n 'graduation-cap',\n 'grape',\n 'grid-2x2',\n 'grid-2x2-check',\n 'grid-2x2-plus',\n 'grid-2x2-x',\n 'grid-3x2',\n 'grid-3x3',\n 'grip',\n 'grip-horizontal',\n 'grip-vertical',\n 'group',\n 'guitar',\n 'ham',\n 'hamburger',\n 'hammer',\n 'hand',\n 'hand-coins',\n 'hand-fist',\n 'hand-grab',\n 'hand-heart',\n 'hand-helping',\n 'hand-metal',\n 'hand-platter',\n 'handbag',\n 'handshake',\n 'hard-drive',\n 'hard-drive-download',\n 'hard-drive-upload',\n 'hard-hat',\n 'hash',\n 'hat-glasses',\n 'haze',\n 'hd',\n 'hdmi-port',\n 'heading',\n 'heading-1',\n 'heading-2',\n 'heading-3',\n 'heading-4',\n 'heading-5',\n 'heading-6',\n 'headphone-off',\n 'headphones',\n 'headset',\n 'heart',\n 'heart-crack',\n 'heart-handshake',\n 'heart-minus',\n 'heart-off',\n 'heart-plus',\n 'heart-pulse',\n 'heart-x',\n 'heater',\n 'helicopter',\n 'hexagon',\n 'highlighter',\n 'history',\n 'hop',\n 'hop-off',\n 'hospital',\n 'hotel',\n 'hourglass',\n 'house',\n 'house-heart',\n 'house-plug',\n 'house-plus',\n 'house-wifi',\n 'ice-cream-bowl',\n 'ice-cream-cone',\n 'id-card',\n 'id-card-lanyard',\n 'image',\n 'image-down',\n 'image-minus',\n 'image-off',\n 'image-play',\n 'image-plus',\n 'image-up',\n 'image-upscale',\n 'images',\n 'import',\n 'inbox',\n 'indian-rupee',\n 'infinity',\n 'info',\n 'inspection-panel',\n 'italic',\n 'iteration-ccw',\n 'iteration-cw',\n 'japanese-yen',\n 'joystick',\n 'kanban',\n 'kayak',\n 'key',\n 'key-round',\n 'key-square',\n 'keyboard',\n 'keyboard-music',\n 'keyboard-off',\n 'lamp',\n 'lamp-ceiling',\n 'lamp-desk',\n 'lamp-floor',\n 'lamp-wall-down',\n 'lamp-wall-up',\n 'land-plot',\n 'landmark',\n 'languages',\n 'laptop',\n 'laptop-minimal',\n 'laptop-minimal-check',\n 'lasso',\n 'lasso-select',\n 'laugh',\n 'layers',\n 'layers-2',\n 'layers-minus',\n 'layers-plus',\n 'layout-dashboard',\n 'layout-grid',\n 'layout-list',\n 'layout-panel-left',\n 'layout-panel-top',\n 'layout-template',\n 'leaf',\n 'leafy-green',\n 'lectern',\n 'lens-concave',\n 'lens-convex',\n 'library',\n 'library-big',\n 'life-buoy',\n 'ligature',\n 'lightbulb',\n 'lightbulb-off',\n 'line-dot-right-horizontal',\n 'line-squiggle',\n 'line-style',\n 'link',\n 'link-2',\n 'link-2-off',\n 'list',\n 'list-check',\n 'list-checks',\n 'list-chevrons-down-up',\n 'list-chevrons-up-down',\n 'list-collapse',\n 'list-end',\n 'list-filter',\n 'list-filter-plus',\n 'list-indent-decrease',\n 'list-indent-increase',\n 'list-minus',\n 'list-music',\n 'list-ordered',\n 'list-plus',\n 'list-restart',\n 'list-start',\n 'list-todo',\n 'list-tree',\n 'list-video',\n 'list-x',\n 'loader',\n 'loader-circle',\n 'loader-pinwheel',\n 'locate',\n 'locate-fixed',\n 'locate-off',\n 'lock',\n 'lock-keyhole',\n 'lock-keyhole-open',\n 'lock-open',\n 'log-in',\n 'log-out',\n 'logs',\n 'lollipop',\n 'luggage',\n 'magnet',\n 'mail',\n 'mail-check',\n 'mail-minus',\n 'mail-open',\n 'mail-plus',\n 'mail-question-mark',\n 'mail-search',\n 'mail-warning',\n 'mail-x',\n 'mailbox',\n 'mails',\n 'map',\n 'map-minus',\n 'map-pin',\n 'map-pin-check',\n 'map-pin-check-inside',\n 'map-pin-house',\n 'map-pin-minus',\n 'map-pin-minus-inside',\n 'map-pin-off',\n 'map-pin-pen',\n 'map-pin-plus',\n 'map-pin-plus-inside',\n 'map-pin-search',\n 'map-pin-x',\n 'map-pin-x-inside',\n 'map-pinned',\n 'map-plus',\n 'mars',\n 'mars-stroke',\n 'martini',\n 'maximize',\n 'maximize-2',\n 'medal',\n 'megaphone',\n 'megaphone-off',\n 'meh',\n 'memory-stick',\n 'menu',\n 'merge',\n 'message-circle',\n 'message-circle-check',\n 'message-circle-code',\n 'message-circle-dashed',\n 'message-circle-heart',\n 'message-circle-more',\n 'message-circle-off',\n 'message-circle-plus',\n 'message-circle-question-mark',\n 'message-circle-reply',\n 'message-circle-warning',\n 'message-circle-x',\n 'message-square',\n 'message-square-check',\n 'message-square-code',\n 'message-square-dashed',\n 'message-square-diff',\n 'message-square-dot',\n 'message-square-heart',\n 'message-square-lock',\n 'message-square-more',\n 'message-square-off',\n 'message-square-plus',\n 'message-square-quote',\n 'message-square-reply',\n 'message-square-share',\n 'message-square-text',\n 'message-square-warning',\n 'message-square-x',\n 'messages-square',\n 'metronome',\n 'mic',\n 'mic-off',\n 'mic-vocal',\n 'microchip',\n 'microscope',\n 'microwave',\n 'milestone',\n 'milk',\n 'milk-off',\n 'minimize',\n 'minimize-2',\n 'minus',\n 'mirror-rectangular',\n 'mirror-round',\n 'monitor',\n 'monitor-check',\n 'monitor-cloud',\n 'monitor-cog',\n 'monitor-dot',\n 'monitor-down',\n 'monitor-off',\n 'monitor-pause',\n 'monitor-play',\n 'monitor-smartphone',\n 'monitor-speaker',\n 'monitor-stop',\n 'monitor-up',\n 'monitor-x',\n 'moon',\n 'moon-star',\n 'motorbike',\n 'mountain',\n 'mountain-snow',\n 'mouse',\n 'mouse-left',\n 'mouse-off',\n 'mouse-pointer',\n 'mouse-pointer-2',\n 'mouse-pointer-2-off',\n 'mouse-pointer-ban',\n 'mouse-pointer-click',\n 'mouse-right',\n 'move',\n 'move-3d',\n 'move-diagonal',\n 'move-diagonal-2',\n 'move-down',\n 'move-down-left',\n 'move-down-right',\n 'move-horizontal',\n 'move-left',\n 'move-right',\n 'move-up',\n 'move-up-left',\n 'move-up-right',\n 'move-vertical',\n 'music',\n 'music-2',\n 'music-3',\n 'music-4',\n 'navigation',\n 'navigation-2',\n 'navigation-2-off',\n 'navigation-off',\n 'network',\n 'newspaper',\n 'nfc',\n 'non-binary',\n 'notebook',\n 'notebook-pen',\n 'notebook-tabs',\n 'notebook-text',\n 'notepad-text',\n 'notepad-text-dashed',\n 'nut',\n 'nut-off',\n 'octagon',\n 'octagon-alert',\n 'octagon-minus',\n 'octagon-pause',\n 'octagon-x',\n 'omega',\n 'option',\n 'orbit',\n 'origami',\n 'package',\n 'package-2',\n 'package-check',\n 'package-minus',\n 'package-open',\n 'package-plus',\n 'package-search',\n 'package-x',\n 'paint-bucket',\n 'paint-roller',\n 'paintbrush',\n 'paintbrush-vertical',\n 'palette',\n 'panda',\n 'panel-bottom',\n 'panel-bottom-close',\n 'panel-bottom-dashed',\n 'panel-bottom-open',\n 'panel-left',\n 'panel-left-close',\n 'panel-left-dashed',\n 'panel-left-open',\n 'panel-left-right-dashed',\n 'panel-right',\n 'panel-right-close',\n 'panel-right-dashed',\n 'panel-right-open',\n 'panel-top',\n 'panel-top-bottom-dashed',\n 'panel-top-close',\n 'panel-top-dashed',\n 'panel-top-open',\n 'panels-left-bottom',\n 'panels-right-bottom',\n 'panels-top-left',\n 'paperclip',\n 'parentheses',\n 'parking-meter',\n 'party-popper',\n 'pause',\n 'paw-print',\n 'pc-case',\n 'pen',\n 'pen-line',\n 'pen-off',\n 'pen-tool',\n 'pencil',\n 'pencil-line',\n 'pencil-off',\n 'pencil-ruler',\n 'pentagon',\n 'percent',\n 'person-standing',\n 'philippine-peso',\n 'phone',\n 'phone-call',\n 'phone-forwarded',\n 'phone-incoming',\n 'phone-missed',\n 'phone-off',\n 'phone-outgoing',\n 'pi',\n 'piano',\n 'pickaxe',\n 'picture-in-picture',\n 'picture-in-picture-2',\n 'piggy-bank',\n 'pilcrow',\n 'pilcrow-left',\n 'pilcrow-right',\n 'pill',\n 'pill-bottle',\n 'pin',\n 'pin-off',\n 'pipette',\n 'pizza',\n 'plane',\n 'plane-landing',\n 'plane-takeoff',\n 'play',\n 'plug',\n 'plug-2',\n 'plug-zap',\n 'plus',\n 'pocket-knife',\n 'podcast',\n 'pointer',\n 'pointer-off',\n 'popcorn',\n 'popsicle',\n 'pound-sterling',\n 'power',\n 'power-off',\n 'presentation',\n 'printer',\n 'printer-check',\n 'printer-x',\n 'projector',\n 'proportions',\n 'puzzle',\n 'pyramid',\n 'qr-code',\n 'quote',\n 'rabbit',\n 'radar',\n 'radiation',\n 'radical',\n 'radio',\n 'radio-off',\n 'radio-receiver',\n 'radio-tower',\n 'radius',\n 'rainbow',\n 'rat',\n 'ratio',\n 'receipt',\n 'receipt-cent',\n 'receipt-euro',\n 'receipt-indian-rupee',\n 'receipt-japanese-yen',\n 'receipt-pound-sterling',\n 'receipt-russian-ruble',\n 'receipt-swiss-franc',\n 'receipt-text',\n 'receipt-turkish-lira',\n 'rectangle-circle',\n 'rectangle-ellipsis',\n 'rectangle-goggles',\n 'rectangle-horizontal',\n 'rectangle-vertical',\n 'recycle',\n 'redo',\n 'redo-2',\n 'redo-dot',\n 'refresh-ccw',\n 'refresh-ccw-dot',\n 'refresh-cw',\n 'refresh-cw-off',\n 'refrigerator',\n 'regex',\n 'remove-formatting',\n 'repeat',\n 'repeat-1',\n 'repeat-2',\n 'repeat-off',\n 'replace',\n 'replace-all',\n 'reply',\n 'reply-all',\n 'rewind',\n 'ribbon',\n 'road',\n 'rocket',\n 'rocking-chair',\n 'roller-coaster',\n 'rose',\n 'rotate-3d',\n 'rotate-ccw',\n 'rotate-ccw-key',\n 'rotate-ccw-square',\n 'rotate-cw',\n 'rotate-cw-square',\n 'route',\n 'route-off',\n 'router',\n 'rows-2',\n 'rows-3',\n 'rows-4',\n 'rss',\n 'ruler',\n 'ruler-dimension-line',\n 'russian-ruble',\n 'sailboat',\n 'salad',\n 'sandwich',\n 'satellite',\n 'satellite-dish',\n 'saudi-riyal',\n 'save',\n 'save-all',\n 'save-off',\n 'scale',\n 'scale-3d',\n 'scaling',\n 'scan',\n 'scan-barcode',\n 'scan-eye',\n 'scan-face',\n 'scan-heart',\n 'scan-line',\n 'scan-qr-code',\n 'scan-search',\n 'scan-text',\n 'school',\n 'scissors',\n 'scissors-line-dashed',\n 'scooter',\n 'screen-share',\n 'screen-share-off',\n 'scroll',\n 'scroll-text',\n 'search',\n 'search-alert',\n 'search-check',\n 'search-code',\n 'search-slash',\n 'search-x',\n 'section',\n 'send',\n 'send-horizontal',\n 'send-to-back',\n 'separator-horizontal',\n 'separator-vertical',\n 'server',\n 'server-cog',\n 'server-crash',\n 'server-off',\n 'settings',\n 'settings-2',\n 'shapes',\n 'share',\n 'share-2',\n 'sheet',\n 'shell',\n 'shelving-unit',\n 'shield',\n 'shield-alert',\n 'shield-ban',\n 'shield-check',\n 'shield-cog',\n 'shield-cog-corner',\n 'shield-ellipsis',\n 'shield-half',\n 'shield-minus',\n 'shield-off',\n 'shield-plus',\n 'shield-question-mark',\n 'shield-user',\n 'shield-x',\n 'ship',\n 'ship-wheel',\n 'shirt',\n 'shopping-bag',\n 'shopping-basket',\n 'shopping-cart',\n 'shovel',\n 'shower-head',\n 'shredder',\n 'shrimp',\n 'shrink',\n 'shrub',\n 'shuffle',\n 'sigma',\n 'signal',\n 'signal-high',\n 'signal-low',\n 'signal-medium',\n 'signal-zero',\n 'signature',\n 'signpost',\n 'signpost-big',\n 'siren',\n 'skip-back',\n 'skip-forward',\n 'skull',\n 'slash',\n 'slice',\n 'sliders-horizontal',\n 'sliders-vertical',\n 'smartphone',\n 'smartphone-charging',\n 'smartphone-nfc',\n 'smile',\n 'smile-plus',\n 'snail',\n 'snowflake',\n 'soap-dispenser-droplet',\n 'sofa',\n 'solar-panel',\n 'soup',\n 'space',\n 'spade',\n 'sparkle',\n 'sparkles',\n 'speaker',\n 'speech',\n 'spell-check',\n 'spell-check-2',\n 'spline',\n 'spline-pointer',\n 'split',\n 'spool',\n 'sport-shoe',\n 'spotlight',\n 'spray-can',\n 'sprout',\n 'square',\n 'square-activity',\n 'square-arrow-down',\n 'square-arrow-down-left',\n 'square-arrow-down-right',\n 'square-arrow-left',\n 'square-arrow-out-down-left',\n 'square-arrow-out-down-right',\n 'square-arrow-out-up-left',\n 'square-arrow-out-up-right',\n 'square-arrow-right',\n 'square-arrow-right-enter',\n 'square-arrow-right-exit',\n 'square-arrow-up',\n 'square-arrow-up-left',\n 'square-arrow-up-right',\n 'square-asterisk',\n 'square-bottom-dashed-scissors',\n 'square-centerline-dashed-horizontal',\n 'square-centerline-dashed-vertical',\n 'square-chart-gantt',\n 'square-check',\n 'square-check-big',\n 'square-chevron-down',\n 'square-chevron-left',\n 'square-chevron-right',\n 'square-chevron-up',\n 'square-code',\n 'square-dashed',\n 'square-dashed-bottom',\n 'square-dashed-bottom-code',\n 'square-dashed-kanban',\n 'square-dashed-mouse-pointer',\n 'square-dashed-text',\n 'square-dashed-top-solid',\n 'square-divide',\n 'square-dot',\n 'square-equal',\n 'square-function',\n 'square-kanban',\n 'square-library',\n 'square-m',\n 'square-menu',\n 'square-minus',\n 'square-mouse-pointer',\n 'square-parking',\n 'square-parking-off',\n 'square-pause',\n 'square-pen',\n 'square-percent',\n 'square-pi',\n 'square-pilcrow',\n 'square-play',\n 'square-plus',\n 'square-power',\n 'square-radical',\n 'square-round-corner',\n 'square-scissors',\n 'square-sigma',\n 'square-slash',\n 'square-split-horizontal',\n 'square-split-vertical',\n 'square-square',\n 'square-stack',\n 'square-star',\n 'square-stop',\n 'square-terminal',\n 'square-user',\n 'square-user-round',\n 'square-x',\n 'squares-exclude',\n 'squares-intersect',\n 'squares-subtract',\n 'squares-unite',\n 'squircle',\n 'squircle-dashed',\n 'squirrel',\n 'stamp',\n 'star',\n 'star-half',\n 'star-off',\n 'step-back',\n 'step-forward',\n 'stethoscope',\n 'sticker',\n 'sticky-note',\n 'stone',\n 'store',\n 'stretch-horizontal',\n 'stretch-vertical',\n 'strikethrough',\n 'subscript',\n 'sun',\n 'sun-dim',\n 'sun-medium',\n 'sun-moon',\n 'sun-snow',\n 'sunrise',\n 'sunset',\n 'superscript',\n 'swatch-book',\n 'swiss-franc',\n 'switch-camera',\n 'sword',\n 'swords',\n 'syringe',\n 'table',\n 'table-2',\n 'table-cells-merge',\n 'table-cells-split',\n 'table-columns-split',\n 'table-of-contents',\n 'table-properties',\n 'table-rows-split',\n 'tablet',\n 'tablet-smartphone',\n 'tablets',\n 'tag',\n 'tags',\n 'tally-1',\n 'tally-2',\n 'tally-3',\n 'tally-4',\n 'tally-5',\n 'tangent',\n 'target',\n 'telescope',\n 'tent',\n 'tent-tree',\n 'terminal',\n 'test-tube',\n 'test-tube-diagonal',\n 'test-tubes',\n 'text-align-center',\n 'text-align-end',\n 'text-align-justify',\n 'text-align-start',\n 'text-cursor',\n 'text-cursor-input',\n 'text-initial',\n 'text-quote',\n 'text-search',\n 'text-wrap',\n 'theater',\n 'thermometer',\n 'thermometer-snowflake',\n 'thermometer-sun',\n 'thumbs-down',\n 'thumbs-up',\n 'ticket',\n 'ticket-check',\n 'ticket-minus',\n 'ticket-percent',\n 'ticket-plus',\n 'ticket-slash',\n 'ticket-x',\n 'tickets',\n 'tickets-plane',\n 'timeline',\n 'timer',\n 'timer-off',\n 'timer-reset',\n 'toggle-left',\n 'toggle-right',\n 'toilet',\n 'tool-case',\n 'toolbox',\n 'tornado',\n 'torus',\n 'touchpad',\n 'touchpad-off',\n 'towel-rack',\n 'tower-control',\n 'toy-brick',\n 'tractor',\n 'traffic-cone',\n 'train-front',\n 'train-front-tunnel',\n 'train-track',\n 'tram-front',\n 'transgender',\n 'trash',\n 'trash-2',\n 'tree-deciduous',\n 'tree-palm',\n 'tree-pine',\n 'trees',\n 'trending-down',\n 'trending-up',\n 'trending-up-down',\n 'triangle',\n 'triangle-alert',\n 'triangle-dashed',\n 'triangle-right',\n 'trophy',\n 'truck',\n 'truck-electric',\n 'turkish-lira',\n 'turntable',\n 'turtle',\n 'tv',\n 'tv-minimal',\n 'tv-minimal-play',\n 'type',\n 'type-outline',\n 'umbrella',\n 'umbrella-off',\n 'underline',\n 'undo',\n 'undo-2',\n 'undo-dot',\n 'unfold-horizontal',\n 'unfold-vertical',\n 'ungroup',\n 'university',\n 'unlink',\n 'unlink-2',\n 'unplug',\n 'upload',\n 'usb',\n 'user',\n 'user-check',\n 'user-cog',\n 'user-key',\n 'user-lock',\n 'user-minus',\n 'user-pen',\n 'user-plus',\n 'user-round',\n 'user-round-check',\n 'user-round-cog',\n 'user-round-key',\n 'user-round-minus',\n 'user-round-pen',\n 'user-round-plus',\n 'user-round-search',\n 'user-round-x',\n 'user-search',\n 'user-star',\n 'user-x',\n 'users',\n 'users-round',\n 'utensils',\n 'utensils-crossed',\n 'utility-pole',\n 'van',\n 'variable',\n 'vault',\n 'vector-square',\n 'vegan',\n 'venetian-mask',\n 'venus',\n 'venus-and-mars',\n 'vibrate',\n 'vibrate-off',\n 'video',\n 'video-off',\n 'videotape',\n 'view',\n 'voicemail',\n 'volleyball',\n 'volume',\n 'volume-1',\n 'volume-2',\n 'volume-off',\n 'volume-x',\n 'vote',\n 'wallet',\n 'wallet-cards',\n 'wallet-minimal',\n 'wallpaper',\n 'wand',\n 'wand-sparkles',\n 'warehouse',\n 'washing-machine',\n 'watch',\n 'waves-arrow-down',\n 'waves-arrow-up',\n 'waves-horizontal',\n 'waves-ladder',\n 'waves-vertical',\n 'waypoints',\n 'webcam',\n 'webhook',\n 'webhook-off',\n 'weight',\n 'weight-tilde',\n 'wheat',\n 'wheat-off',\n 'whole-word',\n 'wifi',\n 'wifi-cog',\n 'wifi-high',\n 'wifi-low',\n 'wifi-off',\n 'wifi-pen',\n 'wifi-sync',\n 'wifi-zero',\n 'wind',\n 'wind-arrow-down',\n 'wine',\n 'wine-off',\n 'workflow',\n 'worm',\n 'wrench',\n 'x',\n 'x-line-top',\n 'zap',\n 'zap-off',\n 'zodiac-aquarius',\n 'zodiac-aries',\n 'zodiac-cancer',\n 'zodiac-capricorn',\n 'zodiac-gemini',\n 'zodiac-leo',\n 'zodiac-libra',\n 'zodiac-ophiuchus',\n 'zodiac-pisces',\n 'zodiac-sagittarius',\n 'zodiac-scorpio',\n 'zodiac-taurus',\n 'zodiac-virgo',\n 'zoom-in',\n 'zoom-out',\n] as const;\n","// Re-generate via:\n// node scripts/generate-lucide-icon-names.mjs\n// (script reads the installed lucide-static/icon-nodes.json keys and writes\n// this file). We embed the list as a static const instead of importing the\n// JSON at runtime so SSR / Vite ESM resolvers don't have to resolve a JSON\n// path inside the lucide-static package at request time.\n\nimport { LUCIDE_ICON_NAMES_RAW } from './icon-names.generated';\n\n/** Kebab-case Lucide icon name. */\nexport type LucideIconName = string;\n\n/**\n * All Lucide icon kebab-case names, sorted alphabetically. Generated from\n * `lucide-static/icon-nodes.json`. Useful for galleries, autocomplete, or\n * batch eager registration via {@link provideLucideIcons}.\n */\nexport const LUCIDE_ICON_NAMES: readonly LucideIconName[] = LUCIDE_ICON_NAMES_RAW;\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewChild,\n ViewEncapsulation,\n forwardRef,\n input,\n viewChild,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { KjInput } from '@kouji-ui/core';\n\nexport type KjInputType = 'text' | 'email' | 'password' | 'number'\n | 'search' | 'tel' | 'url' | 'color';\n\n/** Visual variants — `default` uses the field surface; `sunken` drops to\n * body bg so the input pops against a card/surface parent. */\nexport type KjInputVariant = 'default' | 'sunken';\n\n/** Size tier — `xs` (28px) for filter rows / inline editors, `sm` (32px)\n * for dense forms, `md` (36px, default) for standard rows, `lg` (44px)\n * for touch-first primary inputs. */\nexport type KjInputSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Styled wrapper around the headless KjInput directive.\n *\n * Supports `[(ngModel)]` and `[formControl]` bindings.\n *\n * @example\n * ```html\n * <kj-input type=\"email\" placeholder=\"you@example.com\" [(ngModel)]=\"email\" />\n * ```\n *\n * @doc-keyboard\n * Tab — Moves focus into and out of the input (native input semantics)\n * Enter — Submits the parent <form> when present (native behavior)\n *\n * @doc-aria\n * aria-invalid — set to \"true\" only after the control is touched AND [invalid] is true; avoids announcing errors before the user has interacted\n * data-invalid — mirror of aria-invalid for CSS targeting\n * data-type — reflects the `type` input (\"text\" | \"email\" | \"password\" | ...) for type-specific styling\n * data-variant — reflects the visual `variant` input (\"default\" | \"sunken\")\n * disabled — native attribute reflected when the bound form control's disabled state is true\n *\n * @doc-css-var\n * --kj-input-bg — Background fill. Variant `sunken` retargets this to body bg.\n * --kj-input-fg — Foreground (text + caret) color.\n * --kj-input-border-color — Border color. Focus and invalid states retarget this.\n * --kj-input-border-style — Border line style. Default solid.\n * --kj-input-border-width — Border thickness. Inherits --kj-border.\n * --kj-input-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-input-padding-x — Horizontal padding inside the input.\n * --kj-input-padding-y — Vertical padding inside the input.\n * --kj-input-font — Font family. Defaults to --kj-font-sans.\n * --kj-input-font-size — Font size. Sizes (sm/md/lg) override.\n * --kj-input-placeholder-fg — Placeholder text color. Muted by default.\n * --kj-input-height — Explicit height. Sizes override; matches button md by default.\n *\n * @doc-touch\n * Default height is 36px (md). Use `data-size=\"lg\"` (2.75rem / 44px) when the input is the primary touch target in a form. The `type=\"color\"` swatch renders at 44×32px — pair it with a textual label for the accessible name.\n *\n * @doc-a11y\n * `<kj-input>` is a thin wrapper around the headless `kjInput` directive that\n * composes `KjFormControl` (CVA), `KjDisabled`, and `KjFocusRing`. Always\n * associate a `<label>` via `for=`/`id=` or wrap the input in the label — the\n * component does not generate its own accessible name. Pair with a sibling\n * error node referenced by `aria-describedby` to surface validation messages\n * to screen readers. Focus visibility comes from `:focus-visible` only (2px\n * primary outline), never on mouse click.\n *\n * @doc-related field,password-input,textarea,input-mask\n *\n * @doc-example Default\n * Plain text input — anchors the chrome and the (ngModel) two-way pattern.\n * @doc-file input.example.ts\n * @doc-example Usage\n * Common input shapes — types, invalid state, disabled, and a (ngModel) bind.\n * @doc-file input.usage.example.ts\n * @doc-example Color\n * `type=\"color\"` renders the native swatch wired through the same wrapper.\n * @doc-file input.color.example.ts\n *\n * @doc\n * @doc-category Library/Data input\n * @doc-name input\n * @doc-description Themed text input with type variants, invalid and disabled state, and Angular forms support.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-input',\n standalone: true,\n imports: [KjInput],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KjInputComponent),\n multi: true,\n },\n ],\n template: `\n <input\n #nativeInput\n kjInput\n class=\"kj-input\"\n [type]=\"type()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-size]=\"kjSize() === 'md' ? null : kjSize()\"\n [kjInvalid]=\"invalid()\"\n [kjDisabled]=\"disabled()\"\n />\n `,\n styleUrl: './input.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'style': 'display: contents;',\n '[attr.data-type]': 'type()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjInputComponent implements ControlValueAccessor {\n readonly type = input<KjInputType>('text');\n readonly variant = input<KjInputVariant>('default');\n readonly kjSize = input<KjInputSize>('md');\n readonly value = input<string>('');\n readonly placeholder = input<string>('');\n readonly invalid = input(false);\n readonly disabled = input(false);\n\n @ViewChild(KjInput, { static: true })\n protected innerInput?: KjInput;\n\n /** Native `<input>` element, queried via template-ref. Used by callers\n * (cell editors, focus-trapping consumers) that need to move keyboard\n * focus into the input without reaching into the DOM. */\n readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n /** Focus the underlying `<input>`. No-op until the view renders. */\n focus(): void {\n this.nativeInput()?.nativeElement.focus();\n }\n\n writeValue(val: unknown): void {\n this.innerInput?.formCtrl.writeValue(val);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.innerInput?.formCtrl.registerOnChange(fn);\n }\n registerOnTouched(fn: () => void): void {\n this.innerInput?.formCtrl.registerOnTouched(fn);\n }\n setDisabledState(isDisabled: boolean): void {\n this.innerInput?.formCtrl.setDisabledState(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjIconDirective } from '@kouji-ui/core';\nimport { KjInputComponent } from '../../input/input';\nimport { KjButtonComponent } from '../../button/button';\nimport { LUCIDE_ICON_NAMES } from '../lucide/icon-names';\n\n/**\n * Lucide icon gallery with a live substring filter. Each tile renders the icon\n * via the `kjIcon` directive, which goes through the lazy loader registered by\n * `provideLucideLoader()` — only icons currently mounted in the DOM trigger a\n * dynamic per-icon `import()`. Click a tile to copy its `<i kjIcon=\"…\">`\n * snippet to the clipboard.\n */\n@Component({\n selector: 'kj-icon-gallery-example',\n standalone: true,\n imports: [FormsModule, KjIconDirective, KjInputComponent, KjButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: [`\n kj-icon-gallery-example {\n display: block; }\n kj-icon-gallery-example .gallery-header {\n display: flex;\n flex-direction: column;\n gap: var(--kj-space-sm);\n margin-bottom: var(--kj-space-lg);\n }\n kj-icon-gallery-example .gallery-title {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--kj-space-md);\n flex-wrap: wrap;\n }\n kj-icon-gallery-example .gallery-title h3 {\n margin: 0;\n font-size: var(--kj-font-size-lg, 1.125rem);\n font-weight: 600;\n color: var(--kj-fg-default, currentColor);\n }\n kj-icon-gallery-example .gallery-count {\n font-size: var(--kj-font-size-sm, 0.875rem);\n color: var(--kj-fg-muted, currentColor);\n font-variant-numeric: tabular-nums;\n }\n kj-icon-gallery-example .gallery-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));\n gap: var(--kj-space-md);\n }\n kj-icon-gallery-example .gallery-tile {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--kj-space-xs);\n min-height: 88px;\n padding: var(--kj-space-md);\n border: 1px solid var(--kj-border-default, rgba(0, 0, 0, 0.12));\n border-radius: var(--kj-radius-md, 8px);\n background: var(--kj-bg-body, transparent);\n color: inherit;\n font: inherit;\n cursor: pointer;\n transition: background-color 120ms ease, border-color 120ms ease;\n }\n kj-icon-gallery-example .gallery-tile:hover,\n kj-icon-gallery-example .gallery-tile:focus-visible {\n background: var(--kj-bg-surface, rgba(0, 0, 0, 0.04));\n border-color: var(--kj-border-default, rgba(0, 0, 0, 0.24));\n outline: none;\n }\n kj-icon-gallery-example .gallery-tile:focus-visible {\n box-shadow: 0 0 0 2px var(--kj-bg-primary, #5b8def);\n }\n kj-icon-gallery-example .gallery-tile i.kj-icon {\n font-size: 24px;\n }\n kj-icon-gallery-example .gallery-tile .name {\n font-size: 11px;\n letter-spacing: 0.04em;\n text-transform: lowercase;\n color: var(--kj-fg-muted, currentColor);\n word-break: break-all;\n text-align: center;\n line-height: 1.2;\n }\n kj-icon-gallery-example .gallery-empty { text-align: center;\n color: var(--kj-fg-muted, currentColor);\n border: 1px dashed var(--kj-border-default, rgba(0, 0, 0, 0.12));\n border-radius: var(--kj-radius-md, 8px);\n }\n kj-icon-gallery-example .visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `],\n template: `\n <header class=\"gallery-header\">\n <div class=\"gallery-title\">\n <h3 id=\"kj-icon-gallery-heading\">Lucide icons</h3>\n <span class=\"gallery-count\" aria-live=\"polite\">\n {{ filtered().length }} of {{ total }} shown\n </span>\n </div>\n <label class=\"visually-hidden\" for=\"kj-icon-gallery-search\">\n Search icons by name\n </label>\n <kj-input\n id=\"kj-icon-gallery-search\"\n type=\"search\"\n placeholder=\"Search icons...\"\n aria-label=\"Search icons by name\"\n [ngModel]=\"query()\"\n (ngModelChange)=\"query.set($event)\"\n />\n </header>\n\n @if (filtered().length === 0) {\n <p class=\"gallery-empty\" role=\"status\">\n No icons match “{{ query() }}”.\n </p>\n } @else {\n <ul\n class=\"gallery-grid\"\n role=\"list\"\n aria-labelledby=\"kj-icon-gallery-heading\"\n >\n @for (name of filtered(); track name) {\n <li>\n <kj-button\n kjVariant=\"ghost\"\n class=\"gallery-tile\"\n [attr.aria-label]=\"'Copy icon snippet for ' + name\"\n (click)=\"copy(name)\"\n >\n <i [kjIcon]=\"name\"></i>\n <span class=\"name\">{{ name }}</span>\n </kj-button>\n </li>\n }\n </ul>\n }\n\n <div class=\"visually-hidden\" role=\"status\" aria-live=\"polite\">\n {{ announcement() }}\n </div>\n `,\n})\nexport class KjIconGalleryExample {\n protected readonly total = LUCIDE_ICON_NAMES.length;\n protected readonly query = signal('');\n protected readonly announcement = signal('');\n\n protected readonly filtered = computed(() => {\n const q = this.query().trim().toLowerCase();\n if (!q) return LUCIDE_ICON_NAMES;\n return LUCIDE_ICON_NAMES.filter((name) => name.toLowerCase().includes(q));\n });\n\n protected async copy(name: string): Promise<void> {\n const snippet = `<i kjIcon=\"${name}\"></i>`;\n try {\n // `navigator.clipboard` is unavailable in non-secure contexts (e.g. SSR);\n // fall back silently to a textarea so the example still works locally.\n if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(snippet);\n } else if (typeof document !== 'undefined') {\n const ta = document.createElement('textarea');\n ta.value = snippet;\n ta.setAttribute('readonly', '');\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n this.announcement.set(`Copied snippet for ${name}`);\n } catch {\n this.announcement.set(`Could not copy snippet for ${name}`);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { KjIconDirective } from '@kouji-ui/core';\n\n/**\n * Common icon usages — decorative inline, meaningful with a label, size\n * tokens, and semantic color tokens. Copy-paste starting point.\n */\n@Component({\n selector: 'kj-icon-usage-example',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KjIconDirective],\n styles: [`\n :host { display: flex; flex-direction: column; gap: var(--kj-space-md); }\n .row { display: flex; gap: var(--kj-space-md); align-items: center; flex-wrap: wrap; }\n code { font: var(--kj-text-sm)/1 var(--kj-font-mono); color: var(--kj-fg-muted); }\n `],\n template: `\n <div class=\"row\">\n <i kjIcon=\"search\"></i>\n <span>Decorative — silent for AT, inherits text color</span>\n </div>\n\n <div class=\"row\">\n <i kjIcon=\"alert-triangle\" kjIconLabel=\"Warning\"></i>\n <span>Meaningful — exposed as <code>role=\"img\"</code> with a label</span>\n </div>\n\n <div class=\"row\">\n <i kjIcon=\"circle\" kjIconSize=\"xs\"></i>\n <i kjIcon=\"circle\" kjIconSize=\"sm\"></i>\n <i kjIcon=\"circle\" kjIconSize=\"md\"></i>\n <i kjIcon=\"circle\" kjIconSize=\"lg\"></i>\n <i kjIcon=\"circle\" kjIconSize=\"xl\"></i>\n </div>\n\n <div class=\"row\">\n <i kjIcon=\"check\" kjIconColor=\"success\"></i>\n <i kjIcon=\"info\" kjIconColor=\"info\"></i>\n <i kjIcon=\"alert-triangle\" kjIconColor=\"warning\"></i>\n <i kjIcon=\"x-circle\" kjIconColor=\"danger\"></i>\n <i kjIcon=\"circle\" kjIconColor=\"muted\"></i>\n </div>\n `,\n})\nexport class KjIconUsageExample {}\n","// AUTO-GENERATED by scripts/migrate-examples.mjs (manually augmented)\n// One barrel per component folder — used by the docs app as a lazy chunk.\nexport { KjIconGalleryExample } from './icon.gallery.example';\nexport { KjIconUsageExample } from './icon.usage.example';\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport { KjInputGroup, KjInputGroupAddon } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjInputGroup` / `KjInputGroupAddon`\n * directive family. Renders a flex row (or column) where `<kj-input-group-addon>`\n * elements flank a central `[kjInput]`, sharing collapsed borders so the\n * whole widget looks like a single field.\n *\n * All directive inputs (`kjVariant`, `kjSize`, `kjDisabled`, `kjOrientation`)\n * are forwarded to the composed `KjInputGroup` directive.\n *\n * @example\n * ```html\n * <kj-input-group>\n * <kj-input-group-addon>$</kj-input-group-addon>\n * <input kjInput type=\"text\" placeholder=\"Amount\" />\n * <kj-input-group-addon>.00</kj-input-group-addon>\n * </kj-input-group>\n * ```\n * @doc-example Default\n * Currency prefix and decimal suffix flanking a text input.\n * @doc-file input-group.example.ts\n * @doc-example Usage\n * Common input-group shapes — icon prefix, button suffix, and URL slug.\n * @doc-file input-group.usage.example.ts\n * @doc-example With icon\n * Decorative icon addon for search and similar affordances.\n * @doc-file input-group.icon.example.ts\n * @doc-example With button\n * Inline action button as a suffix (copy, submit, generate, etc.).\n * @doc-file input-group.button.example.ts\n * @doc-example URL slug\n * Static base URL prefix paired with an editable slug.\n * @doc-file input-group.url.example.ts\n * @doc-example Variants\n * Theme variants forwarded to the composed `KjInputGroup` directive.\n * @doc-file input-group.variants.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus to the inner input. Addons are skipped unless they project a focusable child.\n *\n * @doc-aria\n * aria-hidden — Set [kjAriaHidden]=\"true\" on decorative addons (icons, currency symbols, units)\n * data-position — Mirrors the addon's resolved \"prefix\" / \"suffix\" position\n * data-disabled — Mirrors group-level [kjDisabled] for theme CSS\n *\n * @doc-touch\n * Addons inherit the group's height — keep size ≥ `md` so the inline input\n * stays at or above the 44 px target when it is the primary touch surface.\n *\n * @doc-a11y\n * Decorative addons (icons, symbols) must use `[kjAriaHidden]=\"true\"` so AT\n * does not announce them ahead of the input value. Action addons that wrap a\n * real `<button>` or `<a>` keep their native semantics; the group never\n * inserts an extra `role`.\n *\n * @doc-related input,field,button\n *\n * @doc-css-var\n * --kj-input-group-border-color — Border color shared across input and addons.\n * --kj-input-group-border-width — Border thickness. Inherits --kj-border.\n * --kj-input-group-radius — Outer corner radius of the group. Inherits --kj-radius-field.\n * --kj-input-group-addon-bg — Background fill for prefix / suffix addons.\n * --kj-input-group-addon-fg — Foreground color inside addons.\n * --kj-input-group-addon-font — Font family used inside addons.\n * --kj-input-group-addon-size — Font size used inside addons.\n * --kj-input-group-padding-x — Horizontal padding inside addons.\n * --kj-input-group-padding-y — Vertical padding inside addons.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name input-group\n * @doc-description Themed input with prefix and suffix addons such as icons, units, or buttons.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-input-group',\n standalone: true,\n hostDirectives: [\n {\n directive: KjInputGroup,\n inputs: ['kjDisabled', 'kjOrientation'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './input-group.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-input-group' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjInputGroupComponent {\n /** Layout axis. Forwarded to `KjInputGroup`. @default 'horizontal' */\n readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /** Default variant forwarded to the group. */\n readonly kjVariant = input<string | undefined>(undefined);\n\n /** Default size forwarded to the group. */\n readonly kjSize = input<string | undefined>(undefined);\n\n /** Group-level disabled. OR-ed with any inner formControl disabled state. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Styled prefix/suffix addon for use inside `<kj-input-group>`.\n *\n * Renders a bordered segment that visually connects to the inner input.\n * Mark decorative addons (icons, symbols) with `[kjAriaHidden]=\"true\"`.\n *\n * @example\n * ```html\n * <kj-input-group>\n * <kj-input-group-addon>https://</kj-input-group-addon>\n * <input kjInput type=\"text\" placeholder=\"example.com\" />\n * </kj-input-group>\n * ```\n * @doc\n * @doc-name input-group\n */\n@Component({\n selector: 'kj-input-group-addon',\n standalone: true,\n hostDirectives: [\n {\n directive: KjInputGroupAddon,\n inputs: ['kjPosition', 'kjAriaHidden'],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-input-group__addon' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjInputGroupAddonComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjInputMask } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjInputMask` directive. Owns the visual\n * shape of a masked text input. The inner `<input>` carries native input\n * semantics (focus, form integration, validation).\n *\n * The component proxies all `KjInputMask` inputs and the `kjComplete` output.\n * Use `[(ngModel)]` or `[formControl]` on the inner `<input>` for form wiring.\n *\n * @example\n * ```html\n * <kj-input-mask kjMask=\"(999) 999-9999\" [(ngModel)]=\"phone\" />\n * ```\n *\n * @doc-example Default\n * Phone number mask — anchors the chrome and the `kjMaskMode=\"unmasked\"` default.\n * @doc-file input-mask.example.ts\n * @doc-example Usage\n * Common mask patterns assembled into one screen — phone, date, and credit card.\n * @doc-file input-mask.usage.example.ts\n * @doc-example Credit card\n * 16-digit mask with grouped quads.\n * @doc-file input-mask.credit-card.example.ts\n * @doc-example Date\n * ISO `YYYY-MM-DD` mask with format-hint announcement for AT.\n * @doc-file input-mask.date.example.ts\n * @doc-example Validation\n * Pairs `kjComplete` with reactive form validators to flag incomplete masks.\n * @doc-file input-mask.validation.example.ts\n * @doc-example Custom tokens\n * Per-instance token map for masks beyond `9` / `A` / `*`.\n * @doc-file input-mask.custom-tokens.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus into and out of the masked input (native semantics)\n * Backspace — Removes the previous variable slot; static separators are skipped\n * Arrow keys — Move the caret across slots; the directive snaps over static chars\n *\n * @doc-aria\n * aria-invalid — Reflected when [kjInvalid] is true (via the composed KjInput plumbing)\n * aria-describedby— Auto-augmented with the auto-generated format hint unless [kjFormatHint] is empty\n * data-mask-mode — Mirrors [kjMaskMode] (\"unmasked\" | \"masked\") for CSS hooks\n *\n * @doc-touch\n * Height inherits the `kj-input` defaults — `md` is 36 px; use `data-size=\"lg\"`\n * for primary touch fields so the slot-tap surface meets WCAG 2.5.5.\n *\n * @doc-a11y\n * `KjInputMask` auto-generates a screen-reader format hint from the mask\n * template (e.g. `'(999) 999-9999'` → \"Format: (___) ___-____\") and wires\n * it through `aria-describedby`. Override or suppress with `[kjFormatHint]`.\n * The native `<input>` underneath keeps full focus + caret semantics.\n *\n * @doc-related input,field,form,number-input\n *\n * @doc-css-var\n * --kj-input-mask-height — Explicit height of the masked input. Sizes (sm/lg via data-size) override.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name input-mask\n * @doc-description Themed masked text input for phone numbers, dates, credit cards, and custom formats.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-input-mask',\n standalone: true,\n imports: [KjInputMask, FormsModule],\n template: `\n <input\n kjInputMask\n class=\"kj-input-mask__input\"\n [kjMask]=\"kjMask()\"\n [kjMaskTokens]=\"kjMaskTokens()\"\n [kjMaskMode]=\"kjMaskMode()\"\n [kjSlotChar]=\"kjSlotChar()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjInvalid]=\"kjInvalid()\"\n [kjAutoClear]=\"kjAutoClear()\"\n [kjFormatHint]=\"kjFormatHint()\"\n (kjComplete)=\"kjComplete.emit()\"\n />\n `,\n styleUrl: './input-mask.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-input-mask' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjInputMaskComponent {\n /** Mask template. Required. e.g. `'(999) 999-9999'`. */\n readonly kjMask = input.required<string>();\n\n /** Per-instance token overrides merged with the app-wide defaults. */\n readonly kjMaskTokens = input<Record<string, RegExp>>({});\n\n /**\n * What value is committed to the FormControl.\n * - `'unmasked'` (default) — raw alphanumerics.\n * - `'masked'` — full display string.\n */\n readonly kjMaskMode = input<'unmasked' | 'masked'>('unmasked');\n\n /** Placeholder char for empty variable slots. @default '_' */\n readonly kjSlotChar = input<string>('_');\n\n /** Disabled state. @default false */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Invalid state — wires to `aria-invalid` via the inner `KjInput`. @default false */\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n /** Clear on blur if incomplete. @default false */\n readonly kjAutoClear = input(false, { transform: booleanAttribute });\n\n /** Override or suppress the auto-generated screen-reader format hint. */\n readonly kjFormatHint = input<string>('');\n\n /** Emits when every variable slot is filled. */\n readonly kjComplete = output<void>();\n}\n","import { Component, ElementRef, signal, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjInputMask, KJ_INPUT_MASK_PRESETS } from '@kouji-ui/core';\nimport { KjFieldComponent, KjFieldLabelComponent } from '../../field/field';\n\n/**\n * Credit-card form using `KJ_INPUT_MASK_PRESETS`. The `(kjComplete)` event on\n * each field auto-advances focus to the next field — a common UX pattern for\n * payment entry.\n */\n@Component({\n selector: 'kj-input-mask-credit-card-example',\n standalone: true,\n imports: [FormsModule, KjInputMask, KjFieldComponent, KjFieldLabelComponent],\n styles: [\n `\n :host {\n display: block;\n max-width: 400px;\n }\n .card-form {\n display: flex;\n flex-direction: column;\n gap: var(--kj-space-md);\n }\n .card-row {\n display: flex;\n gap: var(--kj-space-md);\n }\n .card-row kj-field {\n flex: 1;\n }\n input[kjInputMask] {\n color: var(--kj-fg-default);\n border: 1px solid var(--kj-border-default);\n border-radius: var(--kj-radius-field, 0.375rem);\n padding: var(--kj-space-sm) var(--kj-space-md);\n font: var(--kj-text-sm) / 1.4 var(--kj-font-sans);\n font-variant-numeric: tabular-nums;\n width: 100%;\n }\n input[kjInputMask]:focus-visible {\n outline: 2px solid var(--kj-fg-primary);\n outline-offset: 2px;\n border-color: var(--kj-fg-primary);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <div class=\"card-form\">\n <kj-field>\n <kj-field-label>Card number</kj-field-label>\n <input\n #cardNumber\n kjInputMask\n [kjMask]=\"presets.cardNumber\"\n [(ngModel)]=\"cardNumberValue\"\n (kjComplete)=\"expiryInput().nativeElement.focus()\"\n />\n </kj-field>\n <div class=\"card-row\">\n <kj-field>\n <kj-field-label>Expiry (MM/YY)</kj-field-label>\n <input\n #expiry\n kjInputMask\n [kjMask]=\"presets.cardExpiry\"\n [(ngModel)]=\"expiryValue\"\n (kjComplete)=\"cvvInput().nativeElement.focus()\"\n />\n </kj-field>\n <kj-field>\n <kj-field-label>CVV</kj-field-label>\n <input #cvv kjInputMask kjMask=\"999\" [(ngModel)]=\"cvvValue\" />\n </kj-field>\n </div>\n </div>\n `,\n})\nexport class KjInputMaskCreditCardExample {\n readonly presets = KJ_INPUT_MASK_PRESETS;\n\n readonly cardNumberValue = signal('');\n readonly expiryValue = signal('');\n readonly cvvValue = signal('');\n\n readonly expiryInput = viewChild.required<ElementRef<HTMLInputElement>>('expiry');\n readonly cvvInput = viewChild.required<ElementRef<HTMLInputElement>>('cvv');\n}\n","import { Component, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjInputMask } from '@kouji-ui/core';\nimport { KjFieldComponent, KjFieldHelpComponent, KjFieldLabelComponent } from '../../field/field';\n\n/**\n * Custom-tokens example — hex colour code `#HHHHHH` using a per-instance\n * token `H` for `/[0-9A-Fa-f]/`.\n *\n * The `#` is treated as a literal (not in the token map), and the remaining\n * six positions accept only hexadecimal characters.\n */\n@Component({\n selector: 'kj-input-mask-custom-tokens-example',\n standalone: true,\n imports: [\n FormsModule,\n KjInputMask,\n KjFieldComponent,\n KjFieldHelpComponent,\n KjFieldLabelComponent,\n ],\n styles: [\n `\n :host {\n display: block;\n max-width: 400px;\n }\n input[kjInputMask] {\n color: var(--kj-fg-default);\n border: 1px solid var(--kj-border-default);\n border-radius: var(--kj-radius-field, 0.375rem);\n padding: var(--kj-space-sm) var(--kj-space-md);\n font: var(--kj-text-sm) / 1.4 var(--kj-font-mono, monospace);\n font-variant-numeric: tabular-nums;\n width: 100%;\n }\n input[kjInputMask]:focus-visible {\n outline: 2px solid var(--kj-fg-primary);\n outline-offset: 2px;\n border-color: var(--kj-fg-primary);\n }\n .preview {\n margin-top: var(--kj-space-md);\n display: flex;\n align-items: center;\n gap: var(--kj-space-sm);\n font-size: var(--kj-text-sm);\n color: var(--kj-fg-default);\n }\n .swatch {\n display: inline-block;\n width: 1.5rem;\n height: 1.5rem;\n border-radius: 0.25rem;\n border: 1px solid var(--kj-border-default);\n flex-shrink: 0;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <kj-field>\n <kj-field-label>Hex colour</kj-field-label>\n <input\n kjInputMask\n kjMask=\"#HHHHHH\"\n [kjMaskTokens]=\"hexTokens\"\n kjMaskMode=\"masked\"\n [(ngModel)]=\"hex\"\n />\n <kj-field-help>Six hexadecimal digits, e.g. #1A2B3C</kj-field-help>\n </kj-field>\n <div class=\"preview\">\n <span class=\"swatch\" [style.background]=\"hex().length === 7 ? hex() : 'transparent'\"></span>\n <span>{{ hex() }}</span>\n </div>\n `,\n})\nexport class KjInputMaskCustomTokensExample {\n readonly hex = signal('#______');\n\n /** Per-instance token map: H = hex digit. */\n readonly hexTokens: Record<string, RegExp> = {\n H: /[0-9A-Fa-f]/,\n };\n}\n","import { Component, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjInputMask, KJ_INPUT_MASK_PRESETS } from '@kouji-ui/core';\nimport { KjFieldComponent, KjFieldHelpComponent, KjFieldLabelComponent } from '../../field/field';\n\n/**\n * Date field using the `usDate` preset (`99/99/9999`).\n * Demonstrates a common calendar-adjacent use case.\n */\n@Component({\n selector: 'kj-input-mask-date-example',\n standalone: true,\n imports: [\n FormsModule,\n KjInputMask,\n KjFieldComponent,\n KjFieldHelpComponent,\n KjFieldLabelComponent,\n ],\n styles: [\n `\n :host {\n display: block;\n max-width: 400px;\n }\n input[kjInputMask] {\n color: var(--kj-fg-default);\n border: 1px solid var(--kj-border-default);\n border-radius: var(--kj-radius-field, 0.375rem);\n padding: var(--kj-space-sm) var(--kj-space-md);\n font: var(--kj-text-sm) / 1.4 var(--kj-font-sans);\n font-variant-numeric: tabular-nums;\n width: 100%;\n }\n input[kjInputMask]:focus-visible {\n outline: 2px solid var(--kj-fg-primary);\n outline-offset: 2px;\n border-color: var(--kj-fg-primary);\n }\n .value-display {\n margin-top: var(--kj-space-md);\n font-size: var(--kj-text-xs);\n color: var(--kj-fg-muted);\n font-family: var(--kj-font-mono, monospace);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <kj-field>\n <kj-field-label>Date of birth</kj-field-label>\n <input kjInputMask [kjMask]=\"presets.usDate\" [(ngModel)]=\"date\" />\n <kj-field-help>MM/DD/YYYY</kj-field-help>\n </kj-field>\n <p class=\"value-display\">Raw value: {{ date() }}</p>\n `,\n})\nexport class KjInputMaskDateExample {\n readonly presets = KJ_INPUT_MASK_PRESETS;\n readonly date = signal('');\n}\n","import { Component, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjInputMask } from '@kouji-ui/core';\nimport { KjFieldComponent, KjFieldHelpComponent, KjFieldLabelComponent } from '../../field/field';\n\n/**\n * Default usage example — phone number mask.\n * Demonstrates `kjMaskMode=\"unmasked\"` (default): the model value is raw\n * digits; the mask shape is only a display concern.\n */\n@Component({\n selector: 'kj-input-mask-example',\n standalone: true,\n imports: [\n FormsModule,\n KjInputMask,\n KjFieldComponent,\n KjFieldLabelComponent,\n KjFieldHelpComponent,\n ],\n styles: [\n `\n :host {\n display: block;\n max-width: 400px;\n }\n input[kjInputMask] {\n color: var(--kj-fg-default);\n border: 1px solid var(--kj-border-default);\n border-radius: var(--kj-radius-field, 0.375rem);\n padding: var(--kj-space-sm) var(--kj-space-md);\n font: var(--kj-text-sm) / 1.4 var(--kj-font-sans);\n font-variant-numeric: tabular-nums;\n width: 100%;\n }\n input[kjInputMask]:focus-visible {\n outline: 2px solid var(--kj-fg-primary);\n outline-offset: 2px;\n border-color: var(--kj-fg-primary);\n }\n .value-display {\n margin-top: var(--kj-space-md);\n font-size: var(--kj-text-xs);\n color: var(--kj-fg-muted);\n font-family: var(--kj-font-mono, monospace);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <kj-field>\n <kj-field-label>Phone number</kj-field-label>\n <input kjInputMask kjMask=\"(999) 999-9999\" [(ngModel)]=\"phone\" />\n <kj-field-help>Format: (###) ###-####</kj-field-help>\n </kj-field>\n <p class=\"value-display\">Value: {{ phone() }}</p>\n `,\n})\nexport class KjInputMaskExample {\n readonly phone = signal('');\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KjInputMaskComponent } from '../input-mask';\n\n/**\n * Common mask patterns assembled into one screen — phone, date, and credit\n * card. Copy-paste starting point for masked forms.\n */\n@Component({\n selector: 'kj-input-mask-usage-example',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KjInputMaskComponent, FormsModule],\n styles: [`\n :host { display: flex; flex-direction: column; gap: var(--kj-space-md); max-width: 360px; }\n label { font: 500 var(--kj-text-sm)/1.4 var(--kj-font-sans); }\n .row { display: flex; flex-direction: column; gap: var(--kj-space-xs); }\n code { font: var(--kj-text-xs)/1 var(--kj-font-mono); color: var(--kj-fg-muted); }\n `],\n template: `\n <div class=\"row\">\n <label for=\"usage-phone\">Phone</label>\n <kj-input-mask id=\"usage-phone\" kjMask=\"(999) 999-9999\" [(ngModel)]=\"phone\" />\n <code>{{ phone() || '—' }}</code>\n </div>\n\n <div class=\"row\">\n <label for=\"usage-date\">Date</label>\n <kj-input-mask id=\"usage-date\" kjMask=\"9999-99-99\" [(ngModel)]=\"date\" />\n <code>{{ date() || '—' }}</code>\n </div>\n\n <div class=\"row\">\n <label for=\"usage-card\">Card</label>\n <kj-input-mask id=\"usage-card\" kjMask=\"9999 9999 9999 9999\" [(ngModel)]=\"card\" />\n <code>{{ card() || '—' }}</code>\n </div>\n `,\n})\nexport class KjInputMaskUsageExample {\n readonly phone = signal('');\n readonly date = signal('');\n readonly card = signal('');\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { KjInputMask } from '@kouji-ui/core';\nimport {\n KjFieldComponent,\n KjFieldErrorComponent,\n KjFieldHelpComponent,\n KjFieldLabelComponent,\n} from '../../field/field';\n\n/**\n * Reactive form with `Validators.required` and the built-in `mask` validator.\n *\n * The mask validator fires automatically when the field has been partially\n * filled — no extra wiring needed. Read `ctrl.errors?.mask` in your template\n * to show a custom \"incomplete\" message.\n */\n@Component({\n selector: 'kj-input-mask-validation-example',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n KjInputMask,\n KjFieldComponent,\n KjFieldLabelComponent,\n KjFieldHelpComponent,\n KjFieldErrorComponent,\n ],\n styles: [\n `\n :host {\n display: block;\n max-width: 400px;\n }\n input[kjInputMask] {\n color: var(--kj-fg-default);\n border: 1px solid var(--kj-border-default);\n border-radius: var(--kj-radius-field, 0.375rem);\n padding: var(--kj-space-sm) var(--kj-space-md);\n font: var(--kj-text-sm) / 1.4 var(--kj-font-sans);\n font-variant-numeric: tabular-nums;\n width: 100%;\n }\n input[kjInputMask]:focus-visible {\n outline: 2px solid var(--kj-fg-primary);\n outline-offset: 2px;\n border-color: var(--kj-fg-primary);\n }\n input[kjInputMask][aria-invalid='true'] {\n border-color: var(--kj-fg-danger, #ef4444);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <kj-field [kjInvalid]=\"phoneCtrl.invalid && phoneCtrl.touched\">\n <kj-field-label>Phone number</kj-field-label>\n <input\n kjInputMask\n kjMask=\"(999) 999-9999\"\n [formControl]=\"phoneCtrl\"\n [kjInvalid]=\"phoneCtrl.invalid && phoneCtrl.touched\"\n />\n <kj-field-help>US phone, e.g. (415) 555-0123</kj-field-help>\n @if (phoneCtrl.touched && phoneCtrl.errors?.['required']) {\n <kj-field-error>Phone number is required.</kj-field-error>\n } @else if (phoneCtrl.touched && phoneCtrl.errors?.['mask']) {\n <kj-field-error>\n Please enter all {{ $any(phoneCtrl.errors)['mask']?.required }} digits ({{\n $any(phoneCtrl.errors)['mask']?.filled\n }}\n of {{ $any(phoneCtrl.errors)['mask']?.required }} filled).\n </kj-field-error>\n }\n </kj-field>\n `,\n})\nexport class KjInputMaskValidationExample {\n readonly phoneCtrl = new FormControl('', [Validators.required]);\n}\n","// AUTO-GENERATED by scripts/migrate-examples.mjs (manually augmented)\n// One barrel per component folder — used by the docs app as a lazy chunk.\nexport { KjInputMaskCreditCardExample } from './input-mask.credit-card.example';\nexport { KjInputMaskCustomTokensExample } from './input-mask.custom-tokens.example';\nexport { KjInputMaskDateExample } from './input-mask.date.example';\nexport { KjInputMaskExample } from './input-mask.example';\nexport { KjInputMaskUsageExample } from './input-mask.usage.example';\nexport { KjInputMaskValidationExample } from './input-mask.validation.example';\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { KjInputOtp, KjInputOtpCell } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjInputOtp` + `KjInputOtpCell`\n * directive family.\n *\n * Renders N square cells in a flex row. Supports `[(ngModel)]` and\n * `[formControl]` / `[formControlName]` out of the box — the full\n * concatenated code string is the form value. Use `[kjSeparatorAfter]=\"[2]\"`\n * to render a visual dash between cell groups (e.g. `123–456`); the\n * separator is purely decorative and never included in the form value.\n *\n * @doc-example Default\n * 6-digit OTP with `[(ngModel)]` two-way binding — anchors the chrome.\n * @doc-file input-otp.example.ts\n * @doc-example Usage\n * Common OTP shapes — reactive form, length 4, masked digits, and a visual\n * separator — assembled as a copy-paste starting point.\n * @doc-file input-otp.usage.example.ts\n * @doc-example Reactive form\n * Wires up `[formControl]` with a `minLength` validator + a submit handler.\n * @doc-file input-otp.reactive.example.ts\n * @doc-example Lengths\n * Common lengths (4 / 6 / 8) side-by-side.\n * @doc-file input-otp.lengths.example.ts\n * @doc-example Masked\n * `[kjMask]=\"true\"` flips cells to `type=\"password\"` for sensitive codes.\n * @doc-file input-otp.masked.example.ts\n * @doc-example With separator\n * `[kjSeparatorAfter]=\"[2]\"` renders a decorative dash between cell groups.\n * @doc-file input-otp.separator.example.ts\n * @doc-example Auto-submit\n * Emits `(kjComplete)` once the code is fully entered — handy for short codes.\n * @doc-file input-otp.autosubmit.example.ts\n *\n * @doc-keyboard\n * Digits|Letters — Type to populate the focused cell, advance to the next\n * Backspace — Clears the focused cell and moves focus back\n * Arrow left|right — Move focus across cells without altering the value\n * Home|End — Jump to the first / last cell\n * Cmd|Ctrl + V — Paste a code; characters distribute across remaining cells\n *\n * @doc-aria\n * role=\"group\" — On the OTP container; labelled by [kjAriaLabel] or the surrounding kj-field\n * aria-label — Bound from [kjAriaLabel] when no kj-field-label is present\n * aria-invalid — Reflected on the group when [kjInvalid] is true (touched-gated)\n * aria-disabled — Reflected on the group when [kjDisabled] is true\n * aria-readonly — Reflected on the group when [kjReadonly] is true\n * inputmode — Set on each cell to \"numeric\" for digits charset\n *\n * @doc-touch\n * `--kj-otp-cell-size` defaults to 44 px so each cell already meets WCAG\n * 2.5.5. The visual separator is `aria-hidden` and never receives focus.\n *\n * @doc-a11y\n * `KjInputOtp` owns paste distribution, charset filtering, and the live\n * announcement on `(kjComplete)`. The widget composes `KjFormControl` (CVA)\n * so `[(ngModel)]` and `[formControl]` work out of the box — the full\n * concatenated code is the form value; the decorative separator is never\n * included.\n *\n * @doc-related input,input-mask,field,form\n *\n * @doc-css-var\n * --kj-otp-cell-size — Square cell width/height. Default 44px (WCAG 2.5.5 touch target).\n * --kj-otp-cell-gap — Gap between adjacent cells.\n * --kj-otp-cell-bg — Cell background fill.\n * --kj-otp-cell-fg — Cell foreground (digit) color.\n * --kj-otp-cell-border-color — Cell border color. Focus and invalid states retarget this.\n * --kj-otp-cell-border-width — Cell border thickness. Inherits --kj-border.\n * --kj-otp-cell-radius — Cell corner radius. Inherits --kj-radius-field.\n * --kj-otp-cell-font — Font family inside cells.\n * --kj-otp-cell-font-size — Font size inside cells.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name input-otp\n * @doc-description Themed OTP input with N cells, paste distribution, auto-submit, masking, and visual separators.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-input-otp',\n standalone: true,\n imports: [KjInputOtp, KjInputOtpCell],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KjInputOtpComponent),\n multi: true,\n },\n ],\n template: `\n <div\n kjInputOtp\n class=\"kj-input-otp__group\"\n [kjLength]=\"kjLength()\"\n [kjCharSet]=\"kjCharSet()\"\n [kjMask]=\"kjMask()\"\n [kjAutoSubmit]=\"kjAutoSubmit()\"\n [kjInvalid]=\"kjInvalid()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjReadonly]=\"kjReadonly()\"\n [kjAriaLabel]=\"kjAriaLabel()\"\n (kjComplete)=\"kjComplete.emit($event)\"\n (kjPasted)=\"kjPasted.emit($event)\"\n >\n @for (i of _indices(); track i) {\n <input\n kjInputOtpCell\n class=\"kj-input-otp__cell\"\n [kjIndex]=\"i\"\n />\n @if (kjSeparatorAfter().includes(i)) {\n <span class=\"kj-input-otp__separator\" aria-hidden=\"true\">–</span>\n }\n }\n </div>\n `,\n styleUrl: './input-otp.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-input-otp' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjInputOtpComponent implements ControlValueAccessor, AfterViewInit {\n // ── Forwarded inputs ─────────────────────────────────────────────────────────\n\n /** Number of OTP cells. Common values: 4, 6, 8. */\n readonly kjLength = input<number>(6);\n\n /** Character-set restriction. */\n readonly kjCharSet = input<'digits' | 'alphanumeric' | RegExp>('digits');\n\n /** When `true`, cells render as `type=\"password\"`. */\n readonly kjMask = input(false, { transform: booleanAttribute });\n\n /** When `true`, emits `kjComplete` once the code is fully entered. */\n readonly kjAutoSubmit = input(false, { transform: booleanAttribute });\n\n /** Reflects invalid state via `aria-invalid` (touched-gated). */\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n /** Disables all cells and the root. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Sets all cells to `readonly`. */\n readonly kjReadonly = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible label for the widget (used when there is no parent `KjFormField`).\n */\n readonly kjAriaLabel = input<string>('');\n\n /**\n * Indices after which to render a visual separator dash.\n * E.g. `[2]` renders `123–456` for a 6-digit code.\n * Purely decorative — the separator never appears in the form value.\n */\n readonly kjSeparatorAfter = input<readonly number[]>([]);\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n\n /** Emitted when the full code is entered. */\n readonly kjComplete = output<string>();\n\n /** Emitted after a paste distributes characters across cells. */\n readonly kjPasted = output<string>();\n\n // ── Internal ─────────────────────────────────────────────────────────────────\n\n /** The inner `KjInputOtp` directive that owns the CVA logic. */\n private readonly _otp = viewChild.required(KjInputOtp);\n\n /** The array of cell indices `[0, 1, ..., kjLength-1]`. */\n readonly _indices = computed(() =>\n Array.from({ length: this.kjLength() }, (_, i) => i),\n );\n\n /** Buffered CVA calls made before the view is initialised. */\n private _pendingValue: string | null = null;\n private _pendingOnChange: ((val: string) => void) | null = null;\n private _pendingOnTouched: (() => void) | null = null;\n private _pendingDisabled: boolean | null = null;\n private _viewReady = false;\n\n ngAfterViewInit(): void {\n this._viewReady = true;\n const ctrl = this._otp().formCtrl;\n if (this._pendingValue !== null) ctrl.writeValue(this._pendingValue);\n if (this._pendingOnChange !== null) ctrl.registerOnChange(this._pendingOnChange as (val: unknown) => void);\n if (this._pendingOnTouched !== null) ctrl.registerOnTouched(this._pendingOnTouched);\n if (this._pendingDisabled !== null) ctrl.setDisabledState(this._pendingDisabled);\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────────────────────\n\n writeValue(value: string | null): void {\n const v = value ?? '';\n if (this._viewReady) {\n this._otp().formCtrl.writeValue(v);\n } else {\n this._pendingValue = v;\n }\n }\n\n registerOnChange(fn: (val: string) => void): void {\n if (this._viewReady) {\n this._otp().formCtrl.registerOnChange(fn as (val: unknown) => void);\n } else {\n this._pendingOnChange = fn;\n }\n }\n\n registerOnTouched(fn: () => void): void {\n if (this._viewReady) {\n this._otp().formCtrl.registerOnTouched(fn);\n } else {\n this._pendingOnTouched = fn;\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this._viewReady) {\n this._otp().formCtrl.setDisabledState(isDisabled);\n } else {\n this._pendingDisabled = isDisabled;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { KJ_SIZE_PRESET, KJ_KBD_SIZE_PRESET, KjKbd } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjKbd` directive.\n *\n * Renders an inner `<kbd kjKbd>` so the native `<kbd>` semantic is preserved\n * (HTML AAM maps `<kbd>` to `role=\"generic\"`; AT typically announces the\n * element's text content directly, with a \"key\" prefix in verbose modes —\n * which is exactly the right read for a keyboard-shortcut visual). The wrapper\n * itself is layout-invisible (`display: contents`) so a kbd inline-flowed in\n * prose does not introduce an extra block-level box that would break baseline\n * alignment with surrounding text.\n *\n * **Composition note.** Per the analysis, the directive is composed by\n * applying `kjKbd` to the inner `<kbd>` rather than via the wrapper's own\n * `hostDirectives`. The directive must run on the visible kbd element so the\n * `data-size` reflection (and any future host bindings) land where theme CSS\n * expects them, not on the `display: contents` outer `<kj-kbd>` custom\n * element.\n *\n * **No variant.** Kbd is tonally neutral — there is no \"destructive kbd\" or\n * \"primary kbd\". A future design language wanting e.g. a \"deprecated shortcut\"\n * tone can fold in via a CSS-only `[data-deprecated=\"true\"]` attribute without\n * API churn.\n *\n * **Size preset.** The wrapper provides `KJ_SIZE_PRESET` with the four-value\n * `xs / sm / md / lg` scale (default `md`). Inline-with-prose kbds genuinely\n * want sub-`sm`; this is the one component in the library that legitimately\n * extends below the standard `[sm, md, lg]` baseline.\n *\n * @example\n * ```html\n * <kj-kbd>Enter</kj-kbd>\n * <kj-kbd kjSize=\"xs\">⌘</kj-kbd>\n * <kj-kbd kjKbdAriaLabel=\"Command\">⌘</kj-kbd>\n * ```\n * @doc-example Default\n * A single keyboard key rendered inline with prose — anchors the chrome.\n * @doc-file kbd.example.ts\n * @doc-example Usage\n * Common kbd shapes — sizes, glyph keys with aria-labels, and a combo.\n * @doc-file kbd.usage.example.ts\n * @doc-example Combo\n * Sibling `<kj-kbd>` elements joined by a literal \"+\" glyph.\n * @doc-file kbd.combo.example.ts\n * @doc-example Sizes\n * `xs` / `sm` / `md` / `lg` — the only library component that goes below `sm`.\n * @doc-file kbd.sizes.example.ts\n * @doc-example In a tooltip\n * Tooltip body wraps a shortcut hint with `<kj-kbd>`.\n * @doc-file kbd.in-tooltip.example.ts\n *\n * @doc-keyboard\n * None — kbd is purely visual. The element is non-interactive and does not participate in tab order.\n *\n * @doc-aria\n * aria-label — When [kjKbdAriaLabel] is set, forwarded to the inner <kbd> for glyph keys (⌘, ⌥, ⇧, ↵)\n * data-size — Mirrors [kjSize] (xs/sm/md/lg) for theme CSS\n *\n * @doc-touch\n * Kbd is a label, not a target — no 44 px requirement. When embedded in\n * an actionable control (button / link), the parent owns the touch\n * surface.\n *\n * @doc-a11y\n * Uses the semantic `<kbd>` element underneath so AT reads the text content\n * directly. Only set `[kjKbdAriaLabel]` when the visible glyph is unicode\n * the screen reader cannot pronounce — for `Enter`, `Ctrl`, `K`, the\n * default text content is the right read.\n *\n * @doc-related tooltip,command-palette,badge\n *\n * @doc-css-var\n * --kj-kbd-bg — Background fill of the key cap. Defaults to --kj-bg-surface.\n * --kj-kbd-fg — Foreground (glyph) color.\n * --kj-kbd-border-color — Border color. Bumped at xs for contrast.\n * --kj-kbd-border-width — Border thickness. Inherits --kj-border.\n * --kj-kbd-radius — Corner radius. Inherits --kj-radius-selector.\n * --kj-kbd-padding-x — Horizontal padding inside the cap. Sizes override.\n * --kj-kbd-padding-y — Vertical padding inside the cap. Sizes override.\n * --kj-kbd-font — Font family. Defaults to --kj-font-mono.\n * --kj-kbd-font-size — Font size. Sizes (xs/sm/md/lg) override.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name kbd\n * @doc-description Themed keyboard key label with size variants and an aria-label override for symbol glyphs.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-kbd',\n standalone: true,\n imports: [KjKbd],\n template: `<kbd\n kjKbd\n class=\"kj-kbd\"\n [kjSize]=\"kjSize()\"\n [attr.aria-label]=\"kjKbdAriaLabel() ?? null\"\n ><ng-content /></kbd>`,\n styleUrl: './kbd.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: KJ_SIZE_PRESET, useValue: KJ_KBD_SIZE_PRESET }],\n})\nexport class KjKbdComponent {\n /** Size preset. Validated against `KJ_KBD_SIZE_PRESET` (`xs` / `sm` / `md` / `lg`). */\n readonly kjSize = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n\n /**\n * Optional override for the host's accessible name. Use only when the\n * visible text is a unicode glyph (`⌘`, `⌥`, `↵`, `⇧`, `⌫`, `⎋`, `⇥`, `⏎`)\n * that AT does not pronounce sensibly. Forwards to `[attr.aria-label]` on\n * the inner `<kbd>`. The default — the host's text content — is the right\n * read for plain-text kbds (`Enter`, `Ctrl`, `K`).\n *\n * The directive does not declare a duplicate input for this; the wrapper is\n * allowed to set host attributes the directive does not own, the same way a\n * consumer using `[kjKbd]` directly is.\n */\n readonly kjKbdAriaLabel = input<string | undefined>(undefined);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n contentChildren,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n KJ_SIZE_PRESET,\n KJ_VARIANT_PRESET,\n KjDivider,\n type KjDividerAlign,\n type KjDividerOrientation,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjDivider` directive.\n *\n * Auto-elects the host element: renders `<hr kjDivider/>` when no content is\n * projected (rule-only case — preserves the native `<hr>` semantic and its\n * implicit `role=\"separator\"` when structural), and `<div kjDivider>` when\n * content is projected (the with-content case — `<hr>` is a void element and\n * cannot host children, so we fall back to `<div>` for label projection).\n *\n * The wrapper itself is layout-invisible (`display: contents`) so a vertical\n * divider inside a flex strip does not introduce an extra block-level box that\n * would break the row-flex.\n *\n * **Composition note.** Per the analysis, the directive is composed by\n * applying `kjDivider` to the inner rendered host (`<hr>` or `<div>`) rather\n * than via the wrapper's own `hostDirectives`. The directive must run on the\n * visible rule element so the data attributes (`data-orientation`,\n * `data-with-content`, `data-variant`, `data-size`) and ARIA semantics land\n * where theme CSS expects them, not on the `display: contents` outer\n * `<kj-divider>` custom element.\n *\n * @example\n * ```html\n * <kj-divider />\n * <kj-divider [kjStructural]=\"true\" kjOrientation=\"vertical\" />\n * <kj-divider [kjStructural]=\"true\">OR</kj-divider>\n * ```\n * @doc-example Default\n * A horizontal rule between two short text blocks.\n * @doc-file divider.example.ts\n * @doc-example Usage\n * A walkthrough of the most common divider usages — structural separator,\n * labelled rule, and vertical divider inside a flex row.\n * @doc-file divider.usage.example.ts\n * @doc-example Vertical\n * `kjOrientation=\"vertical\"` for inline separators inside a flex strip.\n * @doc-file divider.vertical.example.ts\n * @doc-example With content\n * A short label nestled into the rule — \"OR\", \"AND THEN\", section breaks.\n * @doc-file divider.with-content.example.ts\n * @doc-example Variants\n * Line styles — `solid` / `dashed` / `dotted`.\n * @doc-file divider.variants.example.ts\n * @doc-example Sizes\n * `sm` / `md` / `lg` — drives both thickness and surrounding spacing.\n * @doc-file divider.sizes.example.ts\n * @doc-example Structural\n * `[kjStructural]=\"true\"` exposes `role=\"separator\"` for AT.\n * @doc-file divider.structural.example.ts\n *\n * @doc-aria\n * role=\"separator\" — Reflected on the rule when `[kjStructural]=\"true\"`\n * aria-hidden — Reflected `\"true\"` when decorative (the default)\n * data-orientation — Mirrors the resolved orientation for theme/scope hooks\n * data-with-content — Mirrors whether a label is projected\n *\n * @doc-css-var\n * --kj-divider-color — Rule color. Defaults to --kj-border-default with a fg-default fallback mix.\n * --kj-divider-thickness — Line thickness. `sm` keeps 1px; `lg` bumps to 2px.\n * --kj-divider-spacing — Margin around the rule along its block axis (or inline for vertical).\n * --kj-divider-gap — Gap between the projected label and the surrounding rule segments.\n *\n * @doc-a11y\n * When `kjStructural` is `true`, the rule announces as a structural break\n * between regions (`role=\"separator\"`); when false (default), it is fully\n * decorative (`aria-hidden=\"true\"`). The wrapper auto-elects `<hr>` for\n * rule-only and `<div>` for with-content (since `<hr>` is void and cannot\n * host a label).\n *\n * @doc-related typography,card,list\n *\n * @doc-category Library/Layout/Divider\n * @doc\n * @doc-name divider\n * @doc-description Themed horizontal or vertical separator line with solid, dashed, or dotted variants and optional label.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-divider',\n standalone: true,\n imports: [KjDivider],\n template: `\n @if (probed() && !hasContent()) {\n <hr\n kjDivider\n class=\"kj-divider\"\n [kjOrientation]=\"kjOrientation()\"\n [kjStructural]=\"kjStructural()\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n />\n } @else {\n <div\n kjDivider\n class=\"kj-divider\"\n [kjOrientation]=\"kjOrientation()\"\n [kjStructural]=\"kjStructural()\"\n [kjAlign]=\"kjAlign()\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n >\n <span #contentProbe class=\"kj-divider__content\"><ng-content /></span>\n </div>\n }\n `,\n styleUrl: './divider.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: KJ_VARIANT_PRESET,\n useValue: { values: ['solid', 'dashed', 'dotted'], default: 'solid' },\n },\n {\n provide: KJ_SIZE_PRESET,\n useValue: { values: ['sm', 'md', 'lg'], default: 'md' },\n },\n ],\n})\nexport class KjDividerComponent {\n /** Visual orientation of the rule. Reflects to `data-orientation` on the rule host. */\n readonly kjOrientation = input<KjDividerOrientation>('horizontal');\n\n /**\n * Whether the divider carries semantic weight (separates two regions not\n * already demarcated by surrounding heading or landmark structure).\n * Defaults to `false` (decorative; `aria-hidden=\"true\"`).\n */\n readonly kjStructural = input<boolean>(false);\n\n /** Alignment of the projected content within a with-content divider. */\n readonly kjAlign = input<KjDividerAlign>('center');\n\n /** Line style preset. Validated against `KJ_VARIANT_PRESET` (`solid` / `dashed` / `dotted`). */\n readonly kjVariant = input<'solid' | 'dashed' | 'dotted'>('solid');\n\n /** Size preset. Validated against `KJ_SIZE_PRESET` (`sm` / `md` / `lg`). */\n readonly kjSize = input<'sm' | 'md' | 'lg'>('md');\n\n /**\n * Reference to the inner `<span class=\"kj-divider__content\">` that wraps the\n * `<ng-content>` slot when the with-content branch is rendered. Sampled\n * after first render to discover whether the consumer actually projected\n * anything.\n */\n private readonly contentProbe = viewChild<ElementRef<HTMLElement>>('contentProbe');\n\n /**\n * Host election lifecycle:\n * 1. Initial render — the wrapper renders the `<div>` with-content branch\n * so the `<ng-content>` slot is live and any projected nodes (text or\n * elements) physically land in the DOM.\n * 2. `afterNextRender` — the wrapper inspects the `<span>` content probe.\n * If it is empty (no consumer-projected content), `probed` flips true\n * with `hasContent=false`, swapping the host to `<hr>` for the\n * rule-only case (preserves the native `<hr>` semantic and its\n * implicit `role=\"separator\"` when structural).\n * 3. Otherwise the wrapper stays on the `<div>` branch.\n *\n * The conditional-content edge case (consumers toggling content at runtime)\n * is documented in the analysis as an open question — `hasContent` only\n * settles once. Consumers wanting runtime-toggleable labels should wrap them\n * in a stable element child (e.g. `<span>`); `projectedChildren` keeps the\n * host on `<div>` whenever an element child is present.\n */\n protected readonly probed = signal(false);\n protected readonly hasContent = signal(true);\n\n /**\n * Tracks any projected element children so the host stays on `<div>` if a\n * runtime toggle adds or removes a labelled child after first probe.\n */\n private readonly projectedChildren = contentChildren('*', { descendants: false });\n\n constructor() {\n afterNextRender(() => {\n if (this.probed()) return;\n const probe = this.contentProbe()?.nativeElement;\n const initialText = probe ? (probe.textContent ?? '').trim() : '';\n const hasElementChildren = !!probe && this.hasMeaningfulElementChildren(probe);\n const present =\n initialText.length > 0 || hasElementChildren || this.projectedChildren().length > 0;\n this.hasContent.set(present);\n this.probed.set(true);\n });\n }\n\n private hasMeaningfulElementChildren(probe: HTMLElement): boolean {\n const nodes = probe.childNodes;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.nodeType === Node.ELEMENT_NODE) return true;\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.nodeValue ?? '';\n if (text.trim().length > 0) return true;\n }\n }\n return false;\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, input } from '@angular/core';\nimport { KjLink } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjLink` directive.\n *\n * Renders `<a kjLink>` underneath (mirrors `KjDividerComponent`'s \"directive on\n * inner host\" pattern: the visible link element must be the native `<a>` so the\n * directive's data attributes, ARIA semantics, and external/disabled plumbing\n * land on the actual hyperlink rather than the `display: contents` outer\n * `<kj-link>` custom element). Variant and size are user-configurable strings;\n * configure the allowed values and defaults via `provideKjLink(…)` at the\n * application or component scope.\n *\n * @example\n * ```html\n * <kj-link kjHref=\"/about\">About</kj-link>\n * <kj-link kjHref=\"https://example.com\" kjTarget=\"_blank\">External</kj-link>\n * <kj-link kjHref=\"/billing\" [kjDisabled]=\"!ready()\">Manage billing</kj-link>\n * ```\n *\n * @doc-example Default\n * Inline link with default chrome — anchors the variant / size / underline defaults.\n * @doc-file link.example.ts\n * @doc-example Usage\n * Common link shapes — inline prose, external, disabled, and a few sizes.\n * @doc-file link.usage.example.ts\n * @doc-example Variants\n * Primary / muted / destructive — pick the tone that matches the destination.\n * @doc-file link.variants.example.ts\n * @doc-example Sizes\n * `sm` / `md` / `lg` / `inherit` — `inherit` matches the surrounding text.\n * @doc-file link.sizes.example.ts\n * @doc-example External\n * `kjTarget=\"_blank\"` enables external-icon auto-detect; pair with rel safe defaults.\n * @doc-file link.external.example.ts\n * @doc-example Disabled\n * `[kjDisabled]=\"true\"` removes the link from the tab order and dims it.\n * @doc-file link.disabled.example.ts\n * @doc-example In prose\n * Links flow naturally with surrounding text without breaking baseline.\n * @doc-file link.in-prose.example.ts\n *\n * @doc-keyboard\n * Enter — Activates the link (native anchor semantics)\n * Tab — Moves focus to the next focusable element; disabled links are skipped\n *\n * @doc-aria\n * aria-disabled — Reflected when [kjDisabled] is true; tabindex flipped to -1\n * aria-label — Forwarded to the inner <a>; suppresses the AT external-suffix when set\n * data-variant — Mirrors the resolved variant for theme CSS\n * data-size — Mirrors the resolved size for theme CSS\n * data-external — Mirrors the external-link detection for the trailing icon\n *\n * @doc-touch\n * Inline links rely on WCAG 2.5.5's inline-text-link exception. Use\n * `kjSize=\"lg\"` (or a `kj-button kjVariant=\"link\"`) when the link is a\n * standalone touch target outside running text.\n *\n * @doc-a11y\n * Renders a real `<a kjLink>` so AT announces \"link\", focus visibility\n * comes from `:focus-visible` only, and disabled links are kept out of the\n * tab order. External targets get a trailing icon plus an AT suffix unless\n * `[kjAriaLabel]` is set.\n *\n * @doc-related button,icon,typography\n *\n * @doc-css-var\n * --kj-link-fg — Link color at rest. Variants retarget this.\n * --kj-link-hover-fg — Link color on hover. Variants retarget this.\n * --kj-link-visited-fg — Color applied to `:visited` links.\n * --kj-link-decoration — Text-decoration. Underline mode (always/hover/none) retargets this.\n * --kj-link-underline-offset — Distance between the text baseline and the underline.\n * --kj-link-font-size — Font size. Sizes (sm/md/lg/inherit) override; defaults to inherit.\n * --kj-link-radius — Corner radius applied to the focus ring.\n * --kj-link-external-icon — Mask URL for the trailing external-link glyph. Swap for a custom icon.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name link\n * @doc-description Themed hyperlink with variant, size, underline mode, external-link handling, and disabled semantics.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-link',\n standalone: true,\n imports: [KjLink],\n template: `\n <a\n kjLink\n class=\"kj-link\"\n [attr.href]=\"kjHref() ?? null\"\n [attr.target]=\"kjTarget() ?? null\"\n [attr.aria-label]=\"kjAriaLabel() ?? null\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjUnderline]=\"kjUnderline()\"\n [kjExternal]=\"kjExternal()\"\n [kjDisabled]=\"kjDisabled()\"\n >\n <ng-content />\n </a>\n `,\n styleUrl: './link.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjLinkComponent {\n /** Bound to the inner `<a [href]>`. */\n readonly kjHref = input<string | undefined>(undefined);\n\n /** Bound to the inner `<a [target]>`. Setting `_blank` triggers external auto-detect in `KjLink`. */\n readonly kjTarget = input<'_self' | '_blank' | '_parent' | '_top' | string | undefined>(undefined);\n\n /** Bound to `[attr.aria-label]` on the inner `<a>`. When set, suppresses the AT suffix injection. */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n\n /** Forwarded to the directive's `KjVariant` host directive. */\n readonly kjVariant = input<string>('primary');\n\n /** Forwarded to the directive's `KjSize` host directive. */\n readonly kjSize = input<string>('inherit');\n\n /** Forwarded to the directive's underline-mode reflection. */\n readonly kjUnderline = input<'always' | 'hover' | 'none'>('hover');\n\n /** Forwarded to the directive's external-link tri-state. */\n readonly kjExternal = input(false);\n\n /** Forwarded to the directive's disabled bundle (composed `KjDisabled` + plumbing). */\n readonly kjDisabled = input(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n} from '@angular/core';\nimport { KjList, KjListRow, type KjListAs, type KjListOrientation } from '@kouji-ui/core';\n\n/**\n * Themed wrapper around the headless `KjList` directive. Re-maps the directive's\n * `kj`-prefixed inputs to terse public names (`orientation`, `divided`,\n * `hoverable`, `arrowNavigation`, `wrap`) and surfaces the `as` declaration so\n * theme CSS can paint chrome (divider rules, hover highlight, orientation flex\n * direction) off the standard `data-*` mirrors emitted by the directive.\n *\n * The wrapper host is the list root: composing `KjList` via `hostDirectives`\n * means `<kj-list>` itself carries `role=\"list\"` (or omits it when\n * `as=\"nav\"`, where the wrapper opts the host into the `navigation` landmark\n * via `role=\"navigation\"`).\n *\n * **Active vs. selected discipline.** The wrapper paints `data-active` on the\n * row chrome but never infers ARIA. Consumers set `aria-current=\"page\"` (or\n * `step`, `date`, `true`) on the projected `<a>` / `<button>` because the\n * right token depends on the consumer's domain — it is never a List concern.\n *\n * @example Settings list with leading icons\n * ```html\n * <kj-list ariaLabel=\"Account settings\" divided hoverable>\n * <kj-list-item>Profile</kj-list-item>\n * <kj-list-item>Notifications</kj-list-item>\n * <kj-list-item>Billing</kj-list-item>\n * </kj-list>\n * ```\n *\n * @example Sidebar nav with active row\n * ```html\n * <kj-list as=\"nav\" arrowNavigation ariaLabel=\"Primary\">\n * <kj-list-item active=\"true\">\n * <a href=\"/home\" aria-current=\"page\">Home</a>\n * </kj-list-item>\n * <kj-list-item>\n * <a href=\"/settings\">Settings</a>\n * </kj-list-item>\n * </kj-list>\n * ```\n *\n * @doc-example Default\n * A settings list with five rows — anchors the chrome (no dividers, no hover).\n * @doc-file list.example.ts\n * @doc-example Usage\n * Common list shapes — divided, hoverable, and a nav landmark — assembled\n * as a copy-paste starting point.\n * @doc-file list.usage.example.ts\n * @doc-example Divided\n * `[divided]=\"true\"` paints between-row separators via theme CSS.\n * @doc-file list.divided.example.ts\n * @doc-example Nav landmark\n * `as=\"nav\"` opts the host into the `navigation` landmark with a label.\n * @doc-file list.nav.example.ts\n * @doc-example Interactive rows\n * Rows project `<a>` / `<button>` children that own focus and activation.\n * @doc-file list.interactive.example.ts\n * @doc-example With icons and badges\n * Icon prefix + trailing badge combo for status-rich rows.\n * @doc-file list.with-icons.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus to the next interactive child (the row itself is not focusable)\n * Arrow up|down — Moves focus across rows when [arrowNavigation]=\"true\" (roving tabindex)\n * Home|End — Jump to the first / last row when [arrowNavigation]=\"true\"\n *\n * @doc-aria\n * role — \"list\" by default; \"navigation\" when as=\"nav\"\n * aria-label — Bound from [ariaLabel]; required when as=\"nav\"\n * aria-labelledby — Bound from [ariaLabelledby] when an external heading labels the list\n * data-active — Mirrors a list-item's [active] for theme CSS; consumers wire aria-current separately\n * data-disabled— Mirrors a list-item's [disabled] for theme CSS\n *\n * @doc-touch\n * `--kj-list-row-min-h` defaults to 44 px so each row already meets WCAG\n * 2.5.5 when the row hosts an interactive child.\n *\n * @doc-a11y\n * The list never infers `aria-current` — consumers set the right token\n * (`page` / `step` / `date` / `true`) on the projected `<a>` or\n * `<button>` because the meaning is domain-specific. Disabled rows paint\n * chrome via `data-disabled`; the projected child still owns its own\n * `tabindex` / `aria-disabled` discipline.\n *\n * @doc-related divider,menubar,breadcrumb,card\n *\n * @doc-css-var\n * --kj-list-bg — Background fill of the list container.\n * --kj-list-fg — Foreground (text) color of the list.\n * --kj-list-border-color — Border color for bordered + divided variants.\n * --kj-list-radius — Outer corner radius of the list container.\n * --kj-list-row-gap — Gap between rows. Zero by default (rows touch).\n * --kj-list-row-padding-x — Horizontal padding inside each row. Sizes override.\n * --kj-list-row-padding-y — Vertical padding inside each row. Sizes override.\n * --kj-list-row-radius — Corner radius applied to each row's chrome.\n * --kj-list-row-min-h — Minimum row height. Default 44px (WCAG 2.5.5).\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name list\n * @doc-description Themed list surface for settings panels, sidebar navigation, and data feeds.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-list',\n standalone: true,\n hostDirectives: [\n {\n directive: KjList,\n inputs: [\n 'kjAs: as',\n 'kjOrientation: orientation',\n 'kjDivided: divided',\n 'kjHoverable: hoverable',\n 'kjArrowNavigation: arrowNavigation',\n 'kjListWrap: wrap',\n ],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './list.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-list',\n '[attr.role]': 'roleAttr()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'ariaLabelledby() || null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjListComponent {\n /**\n * Declares which semantic element the consumer wants the list to behave as.\n * The wrapper does not literally swap host tags (the host stays\n * `<kj-list>`), but the directive uses `as` to decide whether to emit\n * `role=\"list\"`, and the wrapper layers a `role=\"navigation\"` on top when\n * `as=\"nav\"` so the host doubles as a landmark.\n */\n readonly as = input<KjListAs>('ul');\n\n /** List axis. Drives `data-orientation` on the host for theme CSS. */\n readonly orientation = input<KjListOrientation>('vertical');\n\n /** Whether the list draws between-row borders. CSS-only effect. */\n readonly divided = input(false, { transform: booleanAttribute });\n\n /** Whether rows highlight on hover. Off by default — purely informational lists should not hint at interactivity. */\n readonly hoverable = input(false, { transform: booleanAttribute });\n\n /** Opt-in roving-tabindex group for sidebar-nav-list use cases. Mirrors the accordion arrow-nav pattern. */\n readonly arrowNavigation = input(false, { transform: booleanAttribute });\n\n /** Whether arrow-key navigation wraps at the ends. Only meaningful when `arrowNavigation` is `true`. */\n readonly wrap = input(true, { transform: booleanAttribute });\n\n /** Accessible name for the list. Required for `as=\"nav\"` (landmark naming rule). */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Accessible name reference for the list. Use when an existing heading labels the list. */\n readonly ariaLabelledby = input<string | undefined>(undefined);\n\n /**\n * @internal Computed role for the wrapper host. When `as=\"nav\"`, the host\n * acts as the navigation landmark; otherwise it stays a plain `role=\"list\"`.\n * The wrapper owns this binding (rather than letting the composed `KjList`\n * directive emit it) because Angular gives the component-level host binding\n * priority over a host-directive's binding on the same attribute, so the\n * directive's value would otherwise be silently shadowed.\n */\n protected readonly roleAttr = computed<string | null>(() =>\n this.as() === 'nav' ? 'navigation' : 'list',\n );\n}\n\n/**\n * Per-row wrapper around the headless `KjListItem` directive. Re-maps\n * `kjActive` / `kjDisabled` to terse public names and ensures the row chrome\n * (active highlight, disabled dim) reads off the same `data-*` attributes the\n * core directive emits.\n *\n * The list-item host is **not** a focus stop. Keyboard reachability lives on\n * the projected interactive child (`<a>`, `<button>`). Disabling the row is a\n * two-layer story: `disabled` on `<kj-list-item>` paints the chrome via\n * `data-disabled`, and the projected child wires its own `aria-disabled` /\n * `tabindex` discipline (e.g. via `KjDisabled` on a button).\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name list\n */\n@Component({\n selector: 'kj-list-item',\n standalone: true,\n hostDirectives: [\n {\n directive: KjListRow,\n inputs: ['kjActive: active', 'kjDisabled: disabled'],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-list-item' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjListItemComponent {\n /**\n * Whether the row is the current/active selection (e.g. the current page in\n * a sidebar nav). Reflects to `data-active=\"\"` on the host. Consumers must\n * also set the appropriate `aria-current` token on the projected\n * link/button.\n */\n readonly active = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the row is disabled. Reflects to `data-disabled=\"\"` on the host so\n * theme CSS can dim the chrome. Does not block keyboard reachability — that\n * belongs to the projected interactive child.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n output,\n} from '@angular/core';\nimport {\n KjMenubar,\n KjMenubarItem,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjMenubar` directive.\n *\n * Renders an inner `<nav kjMenubar>` so theme tokens land on the bar\n * element. The component projects its bar items as content; the bar items\n * themselves use `<kj-menubar-item>` (styled wrapper) or `<button\n * kjMenubarItem>` directly.\n *\n * @doc-example Default\n * The canonical File / Edit / View bar — the bare-minimum recipe.\n * @doc-file menubar.example.ts\n * @doc-example Usage\n * A walkthrough of the most common menubar usages — action items and a\n * disabled item. Use this as the copy-paste starting point.\n * @doc-file menubar.usage.example.ts\n * @doc-example With shortcuts\n * Trailing `<kj-kbd>` hints render aligned to the right of each item label.\n * @doc-file menubar.with-shortcuts.example.ts\n * @doc-example With submenu\n * Nested submenu trigger pattern (pending overlay-migration follow-up).\n * @doc-file menubar.with-submenu.example.ts\n * @doc-example Disabled item\n * `[kjDisabled]=\"true\"` drops the item from the keyboard cycle and dims it.\n * @doc-file menubar.disabled-item.example.ts\n *\n * @doc-keyboard\n * ArrowLeft|ArrowRight — Moves focus between menubar items (wraps when [kjLoop]=\"true\")\n * Home — Moves focus to the first menubar item\n * End — Moves focus to the last menubar item\n * Enter|Space — Activates the focused item\n * Tab — Moves focus out of the bar to the next focusable element\n *\n * @doc-aria\n * role=\"menubar\" — On the host `<nav>` (provided by the directive)\n * aria-label — Wired from `kjAriaLabel` so AT announces the bar's purpose\n * aria-orientation — Reflects horizontal orientation\n * aria-disabled — Reflected on items when `kjDisabled` is true\n * data-active — Mirrors the active/open state for theme hooks\n *\n * @doc-touch\n * Items use a 2.75rem (44px) min-height by default — meets WCAG 2.5.5 for\n * touch-first surfaces. Override `--kj-menubar-item-min-height` for denser\n * keyboard-only desktop chrome.\n *\n * @doc-a11y\n * Follows the WAI-ARIA menubar pattern. Focus cycles left/right within the\n * bar; submenu disclosure is opt-in via `kjAutoDisclose`. The bar always\n * exposes a programmatic name — supply `kjAriaLabel` even when a visible\n * heading is nearby.\n *\n * @doc-related dropdown-menu,command-palette,tabs\n *\n * @doc-css-var\n * --kj-menubar-bg — Bar background fill. Defaults to --kj-bg-body.\n * --kj-menubar-fg — Bar foreground (label) color. Defaults to --kj-fg-default.\n * --kj-menubar-border-color — Bar outer border color. Inherits --kj-border-default.\n * --kj-menubar-radius — Bar corner radius. Inherits --kj-radius-box.\n * --kj-menubar-padding — Inner padding around the item row.\n * --kj-menubar-gap — Gap between adjacent menubar items.\n * --kj-menubar-item-padding-x — Per-item horizontal padding.\n * --kj-menubar-item-padding-y — Per-item vertical padding.\n * --kj-menubar-item-min-height — Per-item min height. 2.75rem for WCAG 2.5.5.\n * --kj-menubar-item-radius — Per-item corner radius. Inherits --kj-radius-field.\n * --kj-menubar-item-hover-bg — Item hover background fill.\n * --kj-menubar-item-active-bg — Item background when its menu is open.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name menubar\n * @doc-description Themed desktop-style application menubar with arrow-key navigation and dropdown submenus.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-menubar',\n standalone: true,\n // KjMenubar must live on this component's host element (not on an\n // inner `<nav>`) so projected `<kj-menubar-item>` children can\n // resolve KJ_MENUBAR through their declaration-tree element-injector\n // walk. Composing via hostDirectives places the directive — and the\n // KJ_MENUBAR provider — exactly there.\n hostDirectives: [\n {\n directive: KjMenubar,\n inputs: [\n 'kjLoop',\n 'kjAutoDisclose',\n 'kjAutoDiscloseDelayMs',\n 'kjAriaLabel',\n ],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './menubar.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-menubar',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjMenubarComponent {\n // Inputs (kjLoop, kjAutoDisclose, kjAutoDiscloseDelayMs, kjAriaLabel)\n // are exposed via the composed `KjMenubar` host directive above.\n // Re-declaring them on this class would register them twice in the\n // component's input metadata, which the docs extractor renders as\n // duplicated rows and which triggers NG0955 (duplicate track keys)\n // when the `@for` walking the inputs uses the input name as its key.\n}\n\n/**\n * Styled wrapper around `KjMenubarItem`. Renders a real `<button>` with\n * the `[kjMenubarItem]` directive applied.\n *\n * TODO: menubar+dropdown-menu wiring pending overlay-migration follow-up.\n * In this version, menubar items are plain action buttons without submenu\n * support. Submenu wiring will be reintroduced via the new dropdown-menu\n * API (`<kj-dropdown-menu-content [kjFor]=\"t\">` on the panel side).\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name menubar\n */\n@Component({\n selector: 'kj-menubar-item',\n standalone: true,\n imports: [KjMenubarItem],\n template: `\n <button\n type=\"button\"\n kjMenubarItem\n class=\"kj-menubar-item\"\n [kjDisabled]=\"kjDisabled()\"\n (kjActivate)=\"kjActivate.emit()\"\n >\n <ng-content />\n </button>\n `,\n styleUrl: './menubar.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjMenubarItemComponent {\n /** Disable the item. Reflects `aria-disabled`; popup never opens. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n /** Fires when the item is activated (click / Enter / Space). */\n readonly kjActivate = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ModelSignal,\n ViewEncapsulation,\n booleanAttribute,\n input,\n model,\n viewChild,\n} from '@angular/core';\nimport {\n KjNumberInput,\n KjNumberInputGroup,\n KjNumberStepper,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjNumberInput` directive family.\n *\n * Renders an internal `[kjNumberInput]` field flanked (or stacked) with two\n * `[kjNumberStepper]` buttons. All directive inputs (`kjMin`, `kjMax`,\n * `kjStep`, `kjFormat`, `kjLocale`, `kjCurrency`, …) are forwarded; the\n * `[(kjValue)]` model is two-way bindable.\n *\n * @doc-example Default\n * The bare-minimum recipe — a quantity stepper bound to a number signal.\n * @doc-file number-input.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — quantity, bounded picker, and\n * currency formatting. Use this as the copy-paste starting point.\n * @doc-file number-input.usage.example.ts\n * @doc-example With explicit stepper buttons\n * `kjStepperLayout=\"flanking\"` keeps the +/- buttons on either side.\n * @doc-file number-input.with-stepper.example.ts\n * @doc-example Min / max / step\n * Bound the input via `kjMin` / `kjMax`; `kjStep` drives the +/- delta.\n * @doc-file number-input.min-max.example.ts\n * @doc-example Decimal precision\n * `kjMinimumFractionDigits` and `kjMaximumFractionDigits` pin the display.\n * @doc-file number-input.decimal.example.ts\n * @doc-example Currency formatting\n * `kjFormat=\"currency\"` + `kjCurrency` + `kjLocale` — Intl.NumberFormat all the way.\n * @doc-file number-input.currency.example.ts\n *\n * @doc-keyboard\n * ArrowUp — Increment by `kjStep`\n * ArrowDown — Decrement by `kjStep`\n * PageUp — Increment by `kjPageStep` (when > 0)\n * PageDown — Decrement by `kjPageStep` (when > 0)\n * Home — Jump to `kjMin`\n * End — Jump to `kjMax`\n * Enter — Commit the typed value and reformat\n *\n * @doc-aria\n * role=\"spinbutton\" — On the inner `<input>` (provided by the directive)\n * aria-valuemin — Reflects `kjMin`\n * aria-valuemax — Reflects `kjMax`\n * aria-valuenow — Reflects the current numeric value\n * aria-invalid — Reflects `kjInvalid`\n * aria-disabled — Reflects `kjDisabled` on field + stepper buttons\n * aria-label — Wired from `kjAriaLabel`; required for icon-only / no-label usage\n *\n * @doc-touch\n * The two stepper buttons render at `--kj-number-input-stepper-size`\n * (defaults to 2.75rem / 44px) — meets WCAG 2.5.5. The field row matches\n * `kj-input` height for form-row alignment.\n *\n * @doc-a11y\n * Composes a real `<input>` with the spinbutton role and locale-aware\n * formatting. Always pair with a visible `<label>` or set `kjAriaLabel` —\n * the directive does not synthesise an accessible name. The +/- buttons\n * own their own `kjDecrementLabel` / `kjIncrementLabel` for SR clarity.\n *\n * @doc-related input,slider,form\n *\n * @doc-css-var\n * --kj-number-input-bg — Background fill. Inherits --kj-bg-field.\n * --kj-number-input-fg — Foreground (text) color.\n * --kj-number-input-border-color — Border color. Flips to danger when [data-invalid].\n * --kj-number-input-border-width — Border thickness. Inherits --kj-border.\n * --kj-number-input-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-number-input-padding-x — Horizontal padding on the inner field.\n * --kj-number-input-font — Font family. Defaults to --kj-font-sans.\n * --kj-number-input-font-size — Font size. Size attributes override.\n * --kj-number-input-height — Row height. Matches input/select for form alignment.\n * --kj-number-input-stepper-bg — Stepper button background fill.\n * --kj-number-input-stepper-fg — Stepper button foreground color.\n * --kj-number-input-stepper-size — Stepper button min width/height. Drives touch target.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name number-input\n * @doc-description Themed numeric input with stepper buttons, locale formatting, and min/max/step constraints.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-number-input',\n standalone: true,\n imports: [KjNumberInput, KjNumberInputGroup, KjNumberStepper],\n template: `\n <div\n kjNumberInputGroup\n class=\"kj-number-input\"\n [attr.data-stepper-layout]=\"kjStepperLayout()\"\n [attr.data-size]=\"kjSize() === 'md' ? null : kjSize()\"\n [attr.data-disabled]=\"kjDisabled() ? '' : null\"\n >\n <button\n type=\"button\"\n kjNumberStepper\n kjStep=\"down\"\n class=\"kj-number-input__stepper kj-number-input__stepper--down\"\n [kjAriaLabel]=\"kjDecrementLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n >−</button>\n <input\n #nativeInput\n kjNumberInput\n class=\"kj-number-input__field\"\n [(kjValue)]=\"kjValue\"\n [kjMin]=\"kjMin()\"\n [kjMax]=\"kjMax()\"\n [kjStep]=\"kjStep()\"\n [kjPageStep]=\"kjPageStep()\"\n [kjAllowEmpty]=\"kjAllowEmpty()\"\n [kjAllowDecimals]=\"kjAllowDecimals()\"\n [kjAllowNegative]=\"kjAllowNegative()\"\n [kjReadonly]=\"kjReadonly()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjInvalid]=\"kjInvalid()\"\n [kjUseNativeNumber]=\"kjUseNativeNumber()\"\n [kjFormat]=\"kjFormat()\"\n [kjLocale]=\"kjLocale()\"\n [kjCurrency]=\"kjCurrency()\"\n [kjCurrencyDisplay]=\"kjCurrencyDisplay()\"\n [kjUnit]=\"kjUnit()\"\n [kjUnitDisplay]=\"kjUnitDisplay()\"\n [kjUseGrouping]=\"kjUseGrouping()\"\n [kjMinimumFractionDigits]=\"kjMinimumFractionDigits()\"\n [kjMaximumFractionDigits]=\"kjMaximumFractionDigits()\"\n [kjAriaLabel]=\"kjAriaLabel()\"\n [placeholder]=\"kjPlaceholder()\"\n />\n <button\n type=\"button\"\n kjNumberStepper\n kjStep=\"up\"\n class=\"kj-number-input__stepper kj-number-input__stepper--up\"\n [kjAriaLabel]=\"kjIncrementLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n >+</button>\n </div>\n `,\n styleUrl: './number-input.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjNumberInputComponent {\n /** Two-way bindable numeric model. `null` for empty. */\n readonly kjValue: ModelSignal<number> = model<number>(0);\n\n /** Native `<input>` element queried via template-ref. Exposed so callers\n * (cell editors, form managers) can move focus without reaching into\n * the DOM. */\n readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n /** Focus the underlying `<input>`. No-op until the view renders. */\n focus(): void {\n this.nativeInput()?.nativeElement.focus();\n }\n\n readonly kjMin = input<number>(Number.NEGATIVE_INFINITY);\n readonly kjMax = input<number>(Number.POSITIVE_INFINITY);\n readonly kjStep = input<number>(1);\n readonly kjPageStep = input<number>(0);\n\n readonly kjAllowEmpty = input(true, { transform: booleanAttribute });\n readonly kjAllowDecimals = input(true, { transform: booleanAttribute });\n readonly kjAllowNegative = input(true, { transform: booleanAttribute });\n readonly kjReadonly = input(false, { transform: booleanAttribute });\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n readonly kjUseNativeNumber = input(false, { transform: booleanAttribute });\n\n readonly kjFormat = input<'decimal' | 'currency' | 'percent' | 'unit'>('decimal');\n readonly kjLocale = input<string>('');\n readonly kjCurrency = input<string>('');\n readonly kjCurrencyDisplay = input<'symbol' | 'narrowSymbol' | 'code' | 'name'>('symbol');\n readonly kjUnit = input<string>('');\n readonly kjUnitDisplay = input<'short' | 'long' | 'narrow'>('short');\n readonly kjUseGrouping = input(true, { transform: booleanAttribute });\n readonly kjMinimumFractionDigits = input<number>(0);\n readonly kjMaximumFractionDigits = input<number>(0);\n\n readonly kjPlaceholder = input<string>('');\n readonly kjAriaLabel = input<string>('');\n\n /** Layout for the stepper buttons. */\n readonly kjStepperLayout = input<'flanking' | 'stacked'>('flanking');\n\n /** Size tier — matches `KjInput`. `xs` (28px) hides the steppers so the\n * control collapses to a bare numeric field for filter rows / inline edits. */\n readonly kjSize = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n\n /** Accessible label for the decrement button. */\n readonly kjDecrementLabel = input<string>('Decrease value');\n\n /** Accessible label for the increment button. */\n readonly kjIncrementLabel = input<string>('Increase value');\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport {\n KjBadge,\n KjBadgeVariant,\n KjOverlayBadge,\n KjOverlayBadgeContent,\n KJ_OVERLAY_BADGE,\n KjVisuallyHidden,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjOverlayBadge` family. Renders a\n * positioned badge over a projected anchor (a button, an avatar, a tab label).\n *\n * The wrapper hosts both the `KjOverlayBadge` anchor directive and the\n * internal `<span kjOverlayBadgeContent>` slot. Visual chrome (variant, size,\n * dot styling) is reused from the inline `<kj-badge>` primitive — the slot\n * composes `KjBadge` via `hostDirectives`, so one CSS rule set drives both\n * surfaces.\n *\n * Numeric values truncate at `kjMaxValue` (default `99` ⇒ `99+`). When\n * `kjDot` is true, `kjValue` / `kjMaxValue` are ignored and a fixed-size\n * dot is rendered. When `kjValue` is `null` and `kjDot` is false, the badge\n * collapses (the description id is dropped from the anchor's\n * `aria-describedby` too).\n *\n * Accessibility: the anchor directive merges its description id into the\n * host's existing `aria-describedby` rather than overwriting it. Without a\n * description, the badge content is `aria-hidden` — a stray \"4\" with no\n * context is worse than silence.\n *\n * @example\n * ```html\n * <kj-overlay-badge kjValue=\"4\" kjVariant=\"destructive\" kjDescription=\"4 unread\">\n * <button class=\"icon-button\" aria-label=\"Notifications\">\n * <svg>…</svg>\n * </button>\n * </kj-overlay-badge>\n * ```\n *\n * @doc-example Default\n * Notification bell with an unread count and an accessible description.\n * @doc-file overlay-badge.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — counts, presence dots, and\n * truncated values. Use this as the copy-paste starting point.\n * @doc-file overlay-badge.usage.example.ts\n * @doc-example Dot mode\n * `[kjDot]=\"true\"` collapses to a fixed-size pip — for status indicators.\n * @doc-file overlay-badge.dot.example.ts\n * @doc-example Positions\n * `kjPosition=\"top-end\"` / `bottom-start` — each corner is a valid pin point.\n * @doc-file overlay-badge.positions.example.ts\n * @doc-example On avatar\n * Anchor over `<kj-avatar>` for the canonical online / unread pattern.\n * @doc-file overlay-badge.on-avatar.example.ts\n * @doc-example With description\n * `kjDescription` is wired into the anchor's `aria-describedby` chain.\n * @doc-file overlay-badge.described.example.ts\n *\n * @doc-aria\n * aria-describedby — Merged on the anchor; points to the visually-hidden description\n * aria-hidden — Set on the badge content when no description is provided\n * data-variant — Mirrors the resolved variant for theme/scope hooks\n * data-size — Mirrors the resolved size for theme/scope hooks\n * data-position — Mirrors the corner pin point for theme hooks\n * data-hidden — Mirrors the collapsed state on the anchor host\n *\n * @doc-touch\n * The badge is non-interactive — touch-target rules apply to the *anchor*.\n * Pair with `<kj-button kjSize=\"icon\">` (44×44) for icon-only triggers.\n *\n * @doc-a11y\n * The badge is purely decorative without a `kjDescription`. When a count\n * carries meaning (\"4 unread notifications\"), set `kjDescription` so the\n * anchor's accessible description is enriched instead of leaving a stray\n * \"4\" floating in the AT tree. `kjDecorative=\"true\"` opts out entirely.\n *\n * @doc-related badge,avatar,button\n *\n * @doc-css-var\n * --kj-badge-bg — Badge background fill. Variants override per data-variant.\n * --kj-badge-fg — Badge foreground (label) color.\n * --kj-badge-border-color — Border color. Outline variant sets this.\n * --kj-badge-radius — Corner radius. Inherits --kj-radius-selector.\n * --kj-badge-padding-x — Horizontal padding. Sizes override.\n * --kj-badge-padding-y — Vertical padding.\n * --kj-badge-font-size — Font size. Sizes override.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name overlay-badge\n * @doc-description Themed positioned badge for notification counts or status dots over avatars, icons, and tabs.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-overlay-badge',\n standalone: true,\n hostDirectives: [\n {\n directive: KjOverlayBadge,\n inputs: [\n 'kjPosition: kjPosition',\n 'kjDot: kjDot',\n 'kjDecorative: kjDecorative',\n 'kjDescription: kjDescription',\n ],\n },\n ],\n imports: [KjOverlayBadgeContent, KjVisuallyHidden],\n template: `\n <ng-content />\n @if (!resolvedHidden()) {\n <span\n kjOverlayBadgeContent\n class=\"kj-overlay-badge\"\n [kjBadgeVariant]=\"kjVariant()\"\n [attr.data-size]=\"kjSize()\"\n >\n @if (!ctx.dot()) {\n {{ displayValue() }}\n }\n </span>\n }\n @if (ctx.description() && !ctx.decorative()) {\n <span kjVisuallyHidden [id]=\"ctx.descriptionId()\">{{ ctx.description() }}</span>\n }\n `,\n styleUrl: './overlay-badge.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-overlay-badge-anchor',\n '[attr.data-hidden]': 'resolvedHidden() ? \"\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjOverlayBadgeComponent {\n /** Read the anchor directive's context so the template can mirror its state. */\n protected readonly ctx = inject(KJ_OVERLAY_BADGE);\n\n /**\n * The numeric or textual badge content. Numbers truncate via\n * {@link kjMaxValue}; strings render as-is. `null` collapses the badge\n * unless {@link kjDot} is set.\n */\n readonly kjValue = input<number | string | null>(null);\n\n /**\n * Truncation cap for numeric values. When `value > kjMaxValue`, the badge\n * displays `${kjMaxValue}+`. `null` disables truncation. Ignored when\n * {@link kjDot} is true.\n */\n readonly kjMaxValue = input<number | null>(99);\n\n /**\n * Hides the badge without unmounting the anchor. Useful for value-driven\n * visibility (`[kjHidden]=\"!unread()\"`). Drops the description id from\n * the anchor's `aria-describedby` while hidden.\n */\n readonly kjHidden = input<boolean>(false);\n\n /** Visual variant of the badge — forwarded to the inner `kjBadge` host. */\n readonly kjVariant = input<KjBadgeVariant>('default');\n\n /** Size token — forwarded to the inner content node as `data-size`. */\n readonly kjSize = input<'sm' | 'md' | 'lg'>('md');\n\n /**\n * The truncated string that actually paints. `null` value collapses to\n * empty string; numeric overflow becomes `${max}+`.\n */\n readonly displayValue = computed(() => {\n if (this.ctx.dot()) return '';\n const v = this.kjValue();\n if (v === null || v === undefined || v === '') return '';\n const max = this.kjMaxValue();\n if (typeof v === 'number' && max !== null && v > max) return `${max}+`;\n return String(v);\n });\n\n /**\n * Resolved hidden state — the consumer's `kjHidden` *or* an empty-value\n * non-dot badge (nothing to show). When hidden, the slot is not rendered\n * and the description id is omitted from the anchor's describedby merge.\n */\n readonly resolvedHidden = computed(() => {\n if (this.kjHidden()) return true;\n if (this.ctx.dot()) return false;\n const v = this.kjValue();\n return v === null || v === undefined || v === '';\n });\n}\n\n/**\n * Standalone styled wrapper around `KjOverlayBadgeContent` for the rare case\n * where a consumer projects the slot manually under a sibling\n * `[kjOverlayBadge]` host directive (the no-wrapper / power-user shape).\n *\n * For the common case, prefer `<kj-overlay-badge>` which renders this slot\n * automatically.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name overlay-badge\n */\n@Component({\n selector: 'kj-overlay-badge-content',\n standalone: true,\n hostDirectives: [\n KjOverlayBadgeContent,\n { directive: KjBadge, inputs: ['kjBadgeVariant: kjVariant'] },\n ],\n template: `<ng-content />`,\n styleUrl: './overlay-badge.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-overlay-badge',\n '[attr.data-size]': 'kjSize()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjOverlayBadgeContentComponent {\n /** Size token mirrored to `data-size` for CSS hooks. */\n readonly kjSize = input<'sm' | 'md' | 'lg'>('md');\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ModelSignal,\n ViewEncapsulation,\n input,\n model,\n} from '@angular/core';\nimport {\n KjIconDirective,\n KjPagination,\n KjPaginationItem,\n KjPaginationPrevious,\n KjPaginationNext,\n KjPaginationFirst,\n KjPaginationLast,\n KjPaginationEllipsis,\n KjPaginationInfo,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjPagination` directive — root of the\n * pagination compound. Re-maps the `kjPage` / `kjTotalPages` /\n * `kjSiblingCount` / `kjBoundaryCount` / `kjVariant` / `kjSize` inputs and\n * mirrors the `kjPageChange` output. Hosts `<nav aria-label=\"Pagination\">`\n * via the underlying directive.\n *\n * Compose the eight wrappers — `<kj-pagination>`, `<kj-pagination-item>`,\n * `<kj-pagination-previous>`, `<kj-pagination-next>`, `<kj-pagination-first>`,\n * `<kj-pagination-last>`, `<kj-pagination-ellipsis>`, `<kj-pagination-info>`\n * — to mirror the directive family. The root exposes the directive's\n * `pages()` computed via the `#p=\"kjPagination\"` template ref so the\n * `@for` over numeric tokens / ellipsis tokens lives in the consumer's\n * template (the same tag-agnostic compound shape as the directives).\n *\n * @example\n * ```html\n * <kj-pagination [(kjPage)]=\"page\" [kjTotalPages]=\"10\" #p=\"kjPagination\">\n * <kj-pagination-previous>Previous</kj-pagination-previous>\n * @for (token of p.pages(); track token) {\n * @if (token === 'ellipsis-left' || token === 'ellipsis-right') {\n * <kj-pagination-ellipsis>…</kj-pagination-ellipsis>\n * } @else {\n * <kj-pagination-item [kjPage]=\"token\">{{ token }}</kj-pagination-item>\n * }\n * }\n * <kj-pagination-next>Next</kj-pagination-next>\n * </kj-pagination>\n * ```\n *\n * @doc-example Default\n * The canonical hand-authored compound — First / Prev / pages / Next / Last.\n * @doc-file pagination.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages via the `<kj-pagination-default>`\n * convenience wrapper. Use this as the copy-paste starting point.\n * @doc-file pagination.usage.example.ts\n * @doc-example Large dataset (ellipsis)\n * Larger total counts surface the ellipsis windowing pattern.\n * @doc-file pagination.large.example.ts\n * @doc-example Boundaries\n * First / Last buttons jump to the edges of the range.\n * @doc-file pagination.boundaries.example.ts\n * @doc-example Compact\n * `kjSize=\"sm\"` shrinks the row for dense table footers.\n * @doc-file pagination.compact.example.ts\n * @doc-example With info\n * `<kj-pagination-info>` renders the localised \"Page N of M\" status.\n * @doc-file pagination.with-info.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus across the visible page / boundary buttons\n * Enter|Space — Activates the focused button (navigates to that page)\n *\n * @doc-aria\n * role=\"navigation\" — On the host `<nav>` (provided by the directive)\n * aria-label — \"Pagination\" by default; localise via the directive's input\n * aria-current=\"page\" — Reflected on the active page item\n * aria-disabled — Reflected on boundary buttons when at range edges\n * data-active — Mirrors the current page for theme/scope hooks\n *\n * @doc-touch\n * Items render at 2.75rem (44px) square via `--kj-pagination-item-size` —\n * meets WCAG 2.5.5 by default. `kjSize=\"sm\"` drops to 32px and relies on\n * the inline-text-link exception; reserve for dense desktop tables.\n *\n * @doc-a11y\n * The compound emits real `<button>` elements so native focus and click\n * semantics are preserved. The ellipsis indicator is `aria-hidden` with a\n * visually-hidden \"More pages\" label appended at render time. Boundary\n * buttons reflect their disabled state via `aria-disabled` rather than\n * `disabled` so they remain focusable (and announce a reason).\n *\n * @doc-related table,list,carousel\n *\n * @doc-css-var\n * --kj-pagination-gap — Gap between adjacent page items and boundary controls.\n * --kj-pagination-item-size — Min width/height of each item. 2.75rem for WCAG 2.5.5.\n * --kj-pagination-item-radius — Corner radius for items and boundary buttons.\n * --kj-pagination-item-bg — Item background fill. Variants override.\n * --kj-pagination-item-bg-hover — Item hover background fill.\n * --kj-pagination-item-bg-current — Background fill on the active page.\n * --kj-pagination-item-fg — Item foreground (label) color.\n * --kj-pagination-item-fg-current — Label color on the active page.\n * --kj-pagination-item-border-color — Item border color. Variants override.\n * --kj-pagination-item-border-width — Item border thickness. Inherits --kj-border.\n * --kj-pagination-item-font — Item font family. Defaults to --kj-font-sans.\n * --kj-pagination-item-font-size — Item font size. Sizes override.\n * --kj-pagination-ellipsis-color — Color of the ellipsis gap glyph.\n * --kj-pagination-info-color — Color of the trailing \"Page N of M\" info text.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n * @doc-description Themed pagination control with ellipsis windowing, accessible nav, and two-way page binding.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-pagination',\n standalone: true,\n hostDirectives: [\n {\n directive: KjPagination,\n inputs: [\n 'kjPage',\n 'kjTotalPages',\n 'kjSiblingCount',\n 'kjBoundaryCount',\n 'kjVariant',\n 'kjSize',\n ],\n outputs: ['kjPageChange'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './pagination.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-pagination' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationComponent {}\n\n/**\n * Per-page button within a `<kj-pagination>`. Wraps `KjPaginationItem` and\n * forwards the required `kjPage` plus optional `kjDisabled` / `kjVariant` /\n * `kjSize` inputs. Reflects `aria-current=\"page\"` on the active page.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-item',\n standalone: true,\n imports: [KjPaginationItem],\n template: `\n <button\n type=\"button\"\n kjPaginationItem\n class=\"kj-pagination-item\"\n [kjPage]=\"kjPage()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n >\n <ng-content />\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationItemComponent {\n /** Page number this item navigates to (1-indexed). Required. */\n readonly kjPage = input.required<number>();\n /** Per-item disabled state. Suppresses click and reflects `aria-disabled`. */\n readonly kjDisabled = input<boolean>(false);\n readonly kjVariant = input<string | undefined>(undefined);\n readonly kjSize = input<string | undefined>(undefined);\n}\n\n/**\n * Boundary control that retreats one page. Disabled (via `aria-disabled`)\n * when the parent is on page 1 or the dataset is empty.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-previous',\n standalone: true,\n imports: [KjPaginationPrevious],\n template: `\n <button\n type=\"button\"\n kjPaginationPrevious\n class=\"kj-pagination-action kj-pagination-action--previous\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n >\n <ng-content />\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationPreviousComponent {\n readonly kjVariant = input<string | undefined>(undefined);\n readonly kjSize = input<string | undefined>(undefined);\n}\n\n/**\n * Boundary control that advances one page. Disabled when the parent is on\n * the last page or the dataset is empty.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-next',\n standalone: true,\n imports: [KjPaginationNext],\n template: `\n <button\n type=\"button\"\n kjPaginationNext\n class=\"kj-pagination-action kj-pagination-action--next\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n >\n <ng-content />\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationNextComponent {\n readonly kjVariant = input<string | undefined>(undefined);\n readonly kjSize = input<string | undefined>(undefined);\n}\n\n/**\n * Boundary control that jumps to page 1. Disabled when already on the\n * first page or the dataset is empty.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-first',\n standalone: true,\n imports: [KjPaginationFirst],\n template: `\n <button\n type=\"button\"\n kjPaginationFirst\n class=\"kj-pagination-action kj-pagination-action--first\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n >\n <ng-content />\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationFirstComponent {\n readonly kjVariant = input<string | undefined>(undefined);\n readonly kjSize = input<string | undefined>(undefined);\n}\n\n/**\n * Boundary control that jumps to the last page. Disabled when already on\n * the last page or the dataset is empty.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-last',\n standalone: true,\n imports: [KjPaginationLast],\n template: `\n <button\n type=\"button\"\n kjPaginationLast\n class=\"kj-pagination-action kj-pagination-action--last\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n >\n <ng-content />\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationLastComponent {\n readonly kjVariant = input<string | undefined>(undefined);\n readonly kjSize = input<string | undefined>(undefined);\n}\n\n/**\n * Gap indicator within a `<kj-pagination>`. Wraps `KjPaginationEllipsis`;\n * the visible glyph is decorative, an AT-readable visually-hidden label\n * (\"More pages\") is appended at render time.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-ellipsis',\n standalone: true,\n hostDirectives: [KjPaginationEllipsis],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-pagination-ellipsis' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationEllipsisComponent {}\n\n/**\n * Renders the localised \"Page N of M\" status text for a `<kj-pagination>`.\n * Wraps `KjPaginationInfo`; when the consumer projects their own content\n * the directive yields and the projection wins.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-info',\n standalone: true,\n hostDirectives: [KjPaginationInfo],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-pagination-info' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationInfoComponent {}\n\n/**\n * Convenience wrapper that auto-renders the canonical pagination layout\n * (Previous, First, page tokens with ellipsis, Last, Next) given just\n * `kjPage` + `kjTotalPages`. Use this for the 80% case where the consumer\n * does not need to hand-author the layout.\n *\n * Drop down to the compound (`<kj-pagination>` + child wrappers + `@for`)\n * when more control is required.\n *\n * @example\n * ```html\n * <kj-pagination-default [(kjPage)]=\"page\" [kjTotalPages]=\"10\" />\n * ```\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name pagination\n */\n@Component({\n selector: 'kj-pagination-default',\n standalone: true,\n imports: [\n KjPaginationComponent,\n KjPaginationItemComponent,\n KjPaginationPreviousComponent,\n KjPaginationNextComponent,\n KjPaginationFirstComponent,\n KjPaginationLastComponent,\n KjPaginationEllipsisComponent,\n KjPaginationInfoComponent,\n KjIconDirective,\n ],\n template: `\n <kj-pagination\n [(kjPage)]=\"kjPage\"\n [kjTotalPages]=\"kjTotalPages()\"\n [kjSiblingCount]=\"kjSiblingCount()\"\n [kjBoundaryCount]=\"kjBoundaryCount()\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n #p=\"kjPagination\"\n >\n @if (kjShowFirstLast()) {\n <kj-pagination-first>«</kj-pagination-first>\n }\n <kj-pagination-previous>‹</kj-pagination-previous>\n @for (token of p.pages(); track token) {\n @if (token === 'ellipsis-left' || token === 'ellipsis-right') {\n <kj-pagination-ellipsis>…</kj-pagination-ellipsis>\n } @else {\n <kj-pagination-item [kjPage]=\"token\">{{ token }}</kj-pagination-item>\n }\n }\n <kj-pagination-next><i kjIcon=\"chevron-right\"></i></kj-pagination-next>\n @if (kjShowFirstLast()) {\n <kj-pagination-last>»</kj-pagination-last>\n }\n @if (kjShowInfo()) {\n <kj-pagination-info />\n }\n </kj-pagination>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPaginationDefaultComponent {\n /**\n * Current page (1-indexed). Two-way bound.\n * Field annotation matches the directive's so ng-packagr does not narrow\n * the model signal and break the `[(kjPage)]` binding through the wrapper.\n */\n readonly kjPage: ModelSignal<number> = model<number>(1);\n readonly kjTotalPages = input.required<number>();\n readonly kjSiblingCount = input<number>(1);\n readonly kjBoundaryCount = input<number>(1);\n readonly kjVariant = input<string>('default');\n readonly kjSize = input<string>('md');\n /** Render the First / Last boundary buttons. Default `true`. */\n readonly kjShowFirstLast = input<boolean>(true);\n /** Render the trailing \"Page N of M\" info span. Default `false`. */\n readonly kjShowInfo = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n type OnInit,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n KJ_PASSWORD_INPUT,\n KjButton,\n KjPasswordCapsLockWarning,\n KjPasswordInput,\n KjPasswordInputScope,\n KjPasswordStrength,\n KjPasswordToggle,\n type KjPasswordAutocomplete,\n type KjPasswordScore,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjPasswordInput` directive family. Owns\n * the visual shape of the input + toggle button, and renders the optional\n * strength meter and Caps Lock warning when their feature flags are on.\n *\n * The component composes four directives behind a single API:\n * - `KjPasswordInputScope` on the wrapper (provides the shared context).\n * - `KjPasswordInput` on the inner `<input>`.\n * - `KjPasswordToggle` on a composed `[kjButton]` next to the input.\n * - `KjPasswordStrength` and `KjPasswordCapsLockWarning` rendered conditionally.\n *\n * @example\n * ```html\n * <kj-password-input\n * [(kjValue)]=\"password\"\n * kjAutocomplete=\"new-password\"\n * [kjShowStrength]=\"true\"\n * [kjShowCapsLockWarning]=\"true\" />\n * ```\n *\n * @doc-example Default\n * The bare-minimum recipe — a sign-in password input with the toggle button.\n * @doc-file password-input.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — sign-in, sign-up with strength\n * meter, and a disabled state. Use this as the copy-paste starting point.\n * @doc-file password-input.usage.example.ts\n * @doc-example Show / hide toggle\n * Two-way bind `[(kjRevealed)]` to drive the inner icon from outside.\n * @doc-file password-input.toggle.example.ts\n * @doc-example Strength meter\n * `[kjShowStrength]=\"true\"` renders the four-segment estimator under the row.\n * @doc-file password-input.strength.example.ts\n * @doc-example With validation rules\n * Live rule list bound to the value; pairs well with reactive forms.\n * @doc-file password-input.with-rules.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus into the input, then onto the toggle button\n * Enter — Submits the parent <form> when present (native input behavior)\n * Space (on toggle) — Flips the reveal state\n *\n * @doc-aria\n * type=\"password\"|\"text\" — Native attribute toggles when `kjRevealed` flips\n * aria-pressed — Reflected on the toggle button (mirrors `kjRevealed`)\n * aria-label — Wired from `kjShowLabel` / `kjHideLabel` per state\n * aria-invalid — Reflected on the input when `kjInvalid` is true\n * aria-disabled — Reflected on input and toggle when `kjDisabled` is true\n * role=\"status\" — Used by the optional Caps Lock warning paragraph\n *\n * @doc-touch\n * The toggle button uses `kjSize=\"icon\"` (44×44) so it meets WCAG 2.5.5.\n * The input row matches `kj-input` height for form-row alignment.\n *\n * @doc-a11y\n * The toggle button never reads the password aloud — it only flips the\n * native input type. The Caps Lock warning is a live region so AT\n * announces the state change without stealing focus. Strength feedback is\n * rendered as decorative segments — pair with a textual cue if the score\n * is the only signal carrying meaning.\n *\n * @doc-related input,field,form\n *\n * @doc-css-var\n * --kj-password-input-bg — Background fill. Inherits --kj-bg-field.\n * --kj-password-input-fg — Foreground (text) color.\n * --kj-password-input-border-color — Border color. Flips to danger when invalid.\n * --kj-password-input-border-style — Border style. Defaults to solid.\n * --kj-password-input-border-width — Border thickness. Inherits --kj-border.\n * --kj-password-input-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-password-input-padding-x — Horizontal padding inside the field row.\n * --kj-password-input-padding-y — Vertical padding inside the field row.\n * --kj-password-input-font — Font family. Defaults to --kj-font-sans.\n * --kj-password-input-font-size — Font size. Size attributes override.\n * --kj-password-input-placeholder-fg — Placeholder text color.\n * --kj-password-input-toggle-fg — Show/hide toggle icon color.\n * --kj-password-input-toggle-fg-hover — Show/hide toggle icon color on hover or focus.\n * --kj-password-input-height — Row height. Matches input/select for form alignment.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name password-input\n * @doc-description Themed password input with show/hide toggle, optional strength meter, and Caps Lock warning.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-password-input',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n KjButton,\n KjPasswordInput,\n KjPasswordInputScope,\n KjPasswordToggle,\n KjPasswordStrength,\n KjPasswordCapsLockWarning,\n ],\n template: `\n <div kjPasswordInputScope class=\"kj-password-input\">\n <input\n kjPasswordInput\n class=\"kj-password-input__field\"\n [kjAutocomplete]=\"kjAutocomplete()\"\n [kjMaxLength]=\"kjMaxLength()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjInvalid]=\"kjInvalid()\"\n [(kjRevealed)]=\"kjRevealed\"\n [placeholder]=\"kjPlaceholder()\"\n [formControl]=\"control\"\n />\n @if (kjShowToggle()) {\n <button\n kjButton\n kjPasswordToggle\n class=\"kj-password-input__toggle\"\n [kjVariant]=\"'ghost'\"\n [kjSize]=\"'icon'\"\n [kjShowLabel]=\"kjShowLabel()\"\n [kjHideLabel]=\"kjHideLabel()\"\n >\n @if (kjRevealed()) {\n <svg class=\"kj-password-input__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M3 3l18 18M10.7 10.7a3 3 0 0 0 4.2 4.2M9.3 5.5A10.5 10.5 0 0 1 12 5c5 0 9.3 3.4 10.5 7-.3 1-.9 2-1.7 2.9M6.6 6.6C4.4 8 2.9 9.9 2 11.5 3.2 15.1 7.5 18.5 12 18.5c1.5 0 2.9-.4 4.2-1\" />\n </svg>\n } @else {\n <svg class=\"kj-password-input__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M2 12c2-4 5.5-7 10-7s8 3 10 7c-2 4-5.5 7-10 7s-8-3-10-7z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n }\n </button>\n }\n @if (kjShowStrength()) {\n <div class=\"kj-password-strength\" kjPasswordStrength [attr.data-score]=\"score()\">\n <span class=\"kj-password-strength__seg\"></span>\n <span class=\"kj-password-strength__seg\"></span>\n <span class=\"kj-password-strength__seg\"></span>\n <span class=\"kj-password-strength__seg\"></span>\n </div>\n }\n @if (kjShowCapsLockWarning()) {\n <p kjPasswordCapsLockWarning class=\"kj-password-caps-lock-warning\">\n {{ kjCapsLockMessage() }}\n </p>\n }\n </div>\n `,\n styleUrl: './password-input.css',\n encapsulation: ViewEncapsulation.None,\n host: { 'style': 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPasswordInputComponent implements OnInit {\n /**\n * Native `autocomplete` attribute. Restricted to `'current-password'` |\n * `'new-password'` | `'off'`.\n * @default 'current-password'\n */\n readonly kjAutocomplete = input<KjPasswordAutocomplete>('current-password');\n\n /** Native `maxlength` attribute. */\n readonly kjMaxLength = input<number>(Number.POSITIVE_INFINITY);\n\n /** Disabled state. Reflects to the host `KjPasswordInput`. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Invalid state — wires to ARIA-invalid via the host `KjInput`. */\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n /** Two-way bindable plain-text reveal state. @default false */\n readonly kjRevealed = model<boolean>(false);\n\n /** Placeholder text on the inner `<input>`. */\n readonly kjPlaceholder = input<string>('');\n\n /** Two-way bindable value (proxy CVA for non-form usage). */\n readonly kjValue = model<string>('');\n\n /** Show the show/hide toggle button. @default true */\n readonly kjShowToggle = input(true, { transform: booleanAttribute });\n\n /** Show the strength meter under the input. @default false */\n readonly kjShowStrength = input(false, { transform: booleanAttribute });\n\n /** Show the Caps Lock warning element. @default false */\n readonly kjShowCapsLockWarning = input(false, { transform: booleanAttribute });\n\n /** `aria-label` for the toggle when password is hidden. @default 'Show password' */\n readonly kjShowLabel = input<string>('Show password');\n\n /** `aria-label` for the toggle when password is revealed. @default 'Hide password' */\n readonly kjHideLabel = input<string>('Hide password');\n\n /** Caps Lock warning message (overridable for i18n). */\n readonly kjCapsLockMessage = input<string>('Caps Lock is on.');\n\n /** @internal — bridges template-bound `[(kjValue)]` to the inner `KjPasswordInput`. */\n protected readonly control = new FormControl<string>('', { nonNullable: true });\n\n /** @internal — exposes the score for the strength meter's data attr. */\n protected readonly score = computed<KjPasswordScore>(() => {\n // The directive provides the full `KJ_PASSWORD_INPUT` context; we re-read\n // the score for the data-attribute styling hook on our wrapper element.\n // The host-bound `data-score` from `KjPasswordStrength` already exists,\n // but mirroring it here lets CSS target the wrapper without `:has()`.\n const ctx = this._ctx;\n return ctx?.score() ?? 0;\n });\n\n /**\n * @internal — context resolved from the same scope. Optional because the\n * component itself owns the `[kjPasswordInputScope]` element, so injection\n * resolves up via the providers chain after init. If unavailable, the\n * meter still renders with score 0.\n */\n private readonly _ctx = inject(KJ_PASSWORD_INPUT, { optional: true });\n\n constructor() {\n // Two-way bind value <-> control.\n this.control.valueChanges.subscribe(v => this.kjValue.set(v ?? ''));\n }\n\n ngOnInit(): void {\n if (this.kjValue() !== this.control.value) {\n this.control.setValue(this.kjValue(), { emitEvent: false });\n }\n }\n}\n\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport {\n KjPopoverTrigger,\n KjPopoverContent,\n KjPopoverArrow,\n KjPopoverClose,\n KjPopoverTitle,\n} from '@kouji-ui/core';\n\nexport {\n KjPopoverTrigger,\n KjPopoverContent,\n KjPopoverArrow,\n KjPopoverClose,\n KjPopoverTitle,\n} from '@kouji-ui/core';\n\n/**\n * Click-triggered popover. Compose `[kjPopoverTrigger]` + `<kj-popover-content [kjFor]=\"t\">`\n * with optional `[kjPopoverTitle]` heading and `[kjPopoverClose]` button. The\n * wrapper itself only projects content — its purpose is to host the docs tags.\n *\n * @doc\n * @doc-name popover\n * @doc-is-main\n * @doc-example Default\n * A trigger button + content panel — the bare-minimum recipe.\n * @doc-file popover.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — info panel, side-pinned, and\n * modal confirmation. Use this as the copy-paste starting point.\n * @doc-file popover.usage.example.ts\n * @doc-example Sides\n * `kjSide=\"top|right|bottom|left\"` pins the panel relative to the trigger.\n * @doc-file popover.sides.example.ts\n * @doc-example Modal\n * `[kjTrap]=\"true\"` traps focus inside the panel until it closes.\n * @doc-file popover.modal.example.ts\n * @doc-example Cancellable\n * `[kjPopoverClose]` on a button dismisses the panel and restores focus.\n * @doc-file popover.cancellable.example.ts\n * @doc-example With form\n * Embed inputs inside the panel — focus returns to the trigger on close.\n * @doc-file popover.with-form.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Opens the popover from the trigger\n * Escape — Closes the popover and returns focus to the trigger\n * Tab — Moves focus through the panel; cycles inside when [kjTrap]=\"true\"\n * Shift+Tab — Reverse-cycles focus\n *\n * @doc-aria\n * aria-haspopup — Set to \"dialog\" on the trigger\n * aria-expanded — Reflects the open/closed state on the trigger\n * aria-controls — Links the trigger to the panel id\n * role=\"dialog\" — On the panel (provided via the overlay primitive)\n * aria-labelledby — Wire to `[kjPopoverTitle]` heading id for an accessible name\n *\n * @doc-touch\n * Trigger buttons inherit `kj-button` sizing — use `kjSize=\"md\"` or larger\n * to satisfy WCAG 2.5.5 (44×44). The panel itself is not a touch target.\n *\n * @doc-a11y\n * The panel is portalled to `document.body` so it escapes clipping\n * ancestors while staying linked via `aria-controls`. Focus is returned\n * to the trigger on close, and outside clicks dismiss by default. For\n * destructive confirmations, set `[kjTrap]=\"true\"` so the user must\n * commit or cancel via a visible affordance.\n *\n * @doc-related dialog,tooltip,dropdown-menu\n *\n * @doc-css-var\n * --kj-popover-bg — Panel background fill. Inherits --kj-bg-elevated.\n * --kj-popover-fg — Panel foreground (text) color.\n * --kj-popover-border-color — Panel border color. Inherits --kj-border-default.\n * --kj-popover-radius — Panel corner radius. Inherits --kj-radius-box.\n * --kj-popover-padding-x — Horizontal padding inside the panel.\n * --kj-popover-padding-y — Vertical padding inside the panel.\n * --kj-popover-shadow — Drop shadow under the panel. Inherits --kj-shadow-md.\n * --kj-popover-arrow-size — Edge length of the optional arrow indicator.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-popover',\n standalone: true,\n imports: [KjPopoverTrigger, KjPopoverContent, KjPopoverArrow, KjPopoverClose, KjPopoverTitle],\n template: `<ng-content />`,\n styleUrl: './popover.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjPopoverComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n} from '@angular/core';\nimport { KjProgressBar, KjProgressBarFill } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjProgressBar` directive. Composes the\n * core directive on an inner element and renders the inner\n * `[kjProgressBarFill]` automatically so consumers don't have to remember\n * the two-element shape — the component handles both halves.\n *\n * `kjValue: number | null` is the single mode switch — pass a number for\n * determinate mode (the fill scales to the fraction with a CSS transition),\n * or `null` for indeterminate mode (the fill animates as a CSS-only stripe).\n * The directive omits `aria-valuenow` in indeterminate mode per APG. The\n * indeterminate stripe collapses to a static state under\n * `prefers-reduced-motion: reduce`.\n *\n * Variants and sizes are configurable at the directive level via\n * `provideKjProgressBar(…)`. Defaults: `kjVariant=\"primary\"`, `kjSize=\"md\"`.\n *\n * @example\n * ```html\n * <kj-progress-bar [kjValue]=\"progress()\" kjAriaLabel=\"Upload progress\" />\n * ```\n *\n * @doc-example Default\n * A determinate bar at 50% with an accessible label — the bare-minimum recipe.\n * @doc-file progress-bar.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — determinate upload,\n * indeterminate spinner replacement, and success completion. Use this as\n * the copy-paste starting point.\n * @doc-file progress-bar.usage.example.ts\n * @doc-example Indeterminate\n * `[kjValue]=\"null\"` runs the CSS-only stripe animation.\n * @doc-file progress-bar.indeterminate.example.ts\n * @doc-example Variants\n * `primary` / `success` / `warning` / `error` — pick the semantic color.\n * @doc-file progress-bar.variants.example.ts\n * @doc-example Sizes\n * `xs` / `sm` / `md` / `lg` — drives the bar thickness via CSS tokens.\n * @doc-file progress-bar.sizes.example.ts\n * @doc-example With value text\n * Pair `kjAriaValuetext` with a visible label for richer SR phrasing.\n * @doc-file progress-bar.with-label.example.ts\n *\n * @doc-aria\n * role=\"progressbar\" — On the bar host (provided by the directive)\n * aria-valuenow — Reflects the clamped numeric value; omitted in indeterminate mode\n * aria-valuemin — Reflects `kjMin`\n * aria-valuemax — Reflects `kjMax`\n * aria-valuetext — Reflects `kjAriaValuetext` when set\n * aria-label — Wired from `kjAriaLabel` (or use `kjAriaLabelledby`)\n * data-variant — Mirrors the variant for theme hooks\n * data-size — Mirrors the size for theme hooks\n * data-indeterminate — Set when `kjValue` is null\n *\n * @doc-touch\n * The bar is non-interactive — no touch target rules apply. Pair with a\n * labelled cancel button (44×44) when the operation is cancellable.\n *\n * @doc-a11y\n * Always set `kjAriaLabel` or `kjAriaLabelledby` — a bare percentage\n * (\"50 percent\") with no context is useless to AT users. In indeterminate\n * mode the directive omits `aria-valuenow` per APG. The stripe animation\n * collapses under `prefers-reduced-motion: reduce`.\n *\n * @doc-related skeleton,spinner,toast\n *\n * @doc-css-var\n * --kj-progress-bar-track — Track (unfilled portion) background. Inherits --kj-bg-field.\n * --kj-progress-bar-fill — Fill color. Variants flip this per data-variant.\n * --kj-progress-bar-radius — Track and fill corner radius.\n * --kj-progress-bar-height — Bar thickness. Sizes (xs/sm/md/lg) override.\n * --kj-progress-bar-transition — Transition timing for determinate fill changes.\n * --kj-progress-bar-indeterminate-duration — One-cycle duration of the indeterminate stripe.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name progress-bar\n * @doc-description Themed determinate or indeterminate progress bar with variant and size tokens.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-progress-bar',\n standalone: true,\n imports: [KjProgressBar, KjProgressBarFill],\n template: `\n <div\n kjProgressBar\n class=\"kj-progress-bar\"\n [kjValue]=\"kjValue()\"\n [kjMin]=\"kjMin()\"\n [kjMax]=\"kjMax()\"\n [kjAriaValuetext]=\"kjAriaValuetext()\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [attr.aria-label]=\"kjAriaLabel() ?? null\"\n [attr.aria-labelledby]=\"kjAriaLabelledby() ?? null\"\n >\n <div kjProgressBarFill class=\"kj-progress-bar__fill\"></div>\n </div>\n `,\n styleUrl: './progress-bar.css',\n encapsulation: ViewEncapsulation.None,\n host: { 'style': 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjProgressBarComponent {\n /**\n * Current progress value. `null` = indeterminate (the directive omits\n * `aria-valuenow` and runs the indeterminate stripe). Out-of-range values\n * clamp to `[kjMin, kjMax]` with a dev-mode warning.\n * @default null\n */\n readonly kjValue = input<number>(0);\n\n /** Lower bound, bound to `aria-valuemin`. @default 0 */\n readonly kjMin = input<number>(0);\n\n /** Upper bound, bound to `aria-valuemax`. Must be `> kjMin`. @default 100 */\n readonly kjMax = input<number>(100);\n\n /**\n * Human-readable phrasing reflected to `aria-valuetext`. Use when the raw\n * percentage is less meaningful — `\"Step 3 of 5\"`, `\"1.2 MB of 2.5 MB\"`.\n */\n readonly kjAriaValuetext = input<string>('');\n\n /**\n * Variant — one of the configured presets (`primary` | `success` |\n * `warning` | `error` by default). @default 'primary'\n */\n readonly kjVariant = input<string>('primary');\n\n /**\n * Size — one of the configured presets (`xs` | `sm` | `md` | `lg` by\n * default). Drives the bar height. @default 'md'\n */\n readonly kjSize = input<string>('md');\n\n /**\n * Accessible label for the bar. At least one of `kjAriaLabel` or\n * `kjAriaLabelledby` must be set — a progress bar without a name announces\n * as just *\"50 percent\"*, which is useless to screen-reader users.\n */\n readonly kjAriaLabel = input<string>('');\n\n /** ID reference for the bar's accessible name. See `kjAriaLabel`. */\n readonly kjAriaLabelledby = input<string>('');\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, input, viewChild } from '@angular/core';\nimport { KjRadioGroup, KjRadio } from '@kouji-ui/core';\n\n/**\n * Radio group root. Two-way bind via `[(value)]`.\n *\n * Use `<kj-radio-group>` with `<kj-radio>` children to render a themed\n * single-selection control with label forwarding, disabled propagation, and\n * the design-system tokens applied on top of the headless `KjRadioGroup`.\n *\n * @doc-example Default\n * A vertical size picker — the bare-minimum recipe.\n * @doc-file radio.default.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — vertical and horizontal\n * groups, disabled option. Use this as the copy-paste starting point.\n * @doc-file radio.usage.example.ts\n * @doc-example Group\n * Multiple option groups laid out together — labels stay click-targetable.\n * @doc-file radio.group.example.ts\n * @doc-example Disabled\n * `[disabled]=\"true\"` removes the option from the tab order and dims it.\n * @doc-file radio.disabled.example.ts\n * @doc-example Inline\n * `orientation=\"horizontal\"` lays the radios in a single row.\n * @doc-file radio.inline.example.ts\n *\n * @doc-keyboard\n * ArrowUp|ArrowDown — Moves selection between radios in a vertical group\n * ArrowLeft|ArrowRight — Moves selection between radios in a horizontal group\n * Tab — Enters the group (focuses the checked or first radio)\n * Space — Selects the focused radio\n *\n * @doc-aria\n * role=\"radiogroup\" — On the host `<kj-radio-group>` (provided by the directive)\n * role=\"radio\" — On each `<kj-radio>` dot\n * aria-checked — Reflects the selection state per option\n * aria-labelledby — Wired from the option's visible text label id\n * aria-disabled — Reflects `[disabled]` on individual radios\n * data-orientation — Mirrors `horizontal` / `vertical` for theme hooks\n *\n * @doc-touch\n * The label wraps both the dot and the text — the entire `<kj-radio>` row\n * is clickable. Pair with adequate line-height so the row meets WCAG 2.5.5.\n *\n * @doc-a11y\n * Selection follows the roving-tabindex pattern — only the checked (or\n * first) radio is tab-focusable; arrow keys cycle within. Group always\n * exposes a programmatic name — set `ariaLabel` or wire `aria-labelledby`\n * to a sibling heading.\n *\n * @doc-related checkbox,select,toggle\n *\n * @doc-css-var\n * --kj-radio-size — Diameter of the radio dot.\n * --kj-radio-border — Border color of the unchecked dot. Inherits --kj-border-default.\n * --kj-radio-bg-checked — Inner fill and border color when checked. Inherits --kj-bg-primary.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name radio\n * @doc-description Themed radio group for accessible single-selection forms input with label forwarding.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-radio-group',\n standalone: true,\n hostDirectives: [{ directive: KjRadioGroup, inputs: ['kjValue: value'], outputs: ['kjValueChange: valueChange'] }],\n template: `<ng-content />`,\n styleUrl: './radio.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-radio-group',\n '[attr.data-orientation]': 'orientation()',\n '[attr.aria-label]': 'ariaLabel()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjRadioGroupComponent {\n readonly orientation = input<'horizontal' | 'vertical'>('vertical');\n readonly ariaLabel = input<string | undefined>(undefined);\n}\n\nlet radioIdCounter = 0;\n\n/**\n * Single radio button. Must live inside `<kj-radio-group>`.\n *\n * The host renders a `<label>` that wraps the radio dot AND the projected\n * content. Clicking anywhere on the label (including the text) selects the\n * radio because the label's native click-forwarding behaviour fires the\n * directive's click handler. When `disabled` is set, both the dot and the\n * label text dim (see `[data-disabled]` rules in `radio.css`).\n * @doc\n * @doc-name radio\n */\n@Component({\n selector: 'kj-radio',\n standalone: true,\n imports: [KjRadio],\n template: `\n <!-- Click-region wrapper. The focusable element is the inner kjRadio span\n (role=\"radio\", tabindex, Space/Enter handlers); this div only proxies\n pointer events from the label area, so the lint rules below don't apply. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div class=\"kj-radio-inner\" (click)=\"onLabelClick($event)\">\n <span\n #dot\n kjRadio\n tabindex=\"0\"\n class=\"kj-radio-dot\"\n [kjRadioValue]=\"value()\"\n [kjDisabled]=\"disabled()\"\n [attr.aria-labelledby]=\"labelId\"\n ></span>\n <span class=\"kj-radio-label\" [id]=\"labelId\"><ng-content /></span>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-radio',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjRadioComponent {\n readonly value = input.required<unknown>();\n readonly disabled = input(false);\n\n protected readonly labelId = `kj-radio-${++radioIdCounter}`;\n\n private readonly dot = viewChild.required<ElementRef<HTMLElement>>('dot');\n\n /** Forward label-area clicks to the radio dot. The dot itself bubbles\n * through, so we early-return to avoid a double-select. */\n protected onLabelClick(e: MouseEvent): void {\n if (this.disabled()) return;\n const dotEl = this.dot().nativeElement;\n const target = e.target as Node;\n if (target === dotEl || dotEl.contains(target)) return;\n dotEl.click();\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, contentChildren, forwardRef, input, inject, computed } from '@angular/core';\nimport { KjSelect, KjSelectTrigger, KjSelectContent, KjOption } from '@kouji-ui/core';\n\n/**\n * Select root. Two-way bind via `[(value)]`.\n *\n * Users only need `<kj-select>` and `<kj-option>`. The trigger button and\n * listbox panel are rendered internally so the consumer markup stays minimal,\n * with theme tokens, placeholder text, and keyboard navigation already wired.\n *\n * @doc-keyboard\n * Enter|Space — Opens the listbox from the trigger; activates the focused option when open\n * ArrowDown — Moves focus to the next option (clamps at the end)\n * ArrowUp — Moves focus to the previous option (clamps at the start)\n * Home — Moves focus to the first option\n * End — Moves focus to the last option\n * A-Z (type-ahead) — Focuses the first option whose visible text starts with the typed character\n * Escape — Closes the listbox and returns focus to the trigger\n * Tab — Closes the listbox and moves focus to the next focusable element\n *\n * @doc-aria\n * aria-haspopup — set to \"listbox\" on the trigger button\n * aria-expanded — set on the trigger; reflects the open/closed state of the listbox\n * aria-controls — links the trigger to the panel id\n * aria-activedescendant — set on the panel; points to the id of the currently focused option\n * aria-multiselectable — set on the panel to \"true\" when [multiple] is true\n * role=\"listbox\" — on the content panel (provided via KJ_OVERLAY_PANEL_ROLE)\n * role=\"option\" — on each kj-option child\n * aria-selected — set on each option to \"true\" or \"false\"\n * aria-disabled — set on options when [kjDisabled] is true\n * data-disabled / data-multiple — mirrors of the disabled / multiple state for CSS\n *\n * @doc-css-var\n * --kj-select-trigger-height — Height of the trigger button. Sizes (sm/md/lg) override.\n *\n * @doc-touch\n * Default trigger height is 36px. Apply `data-size=\"lg\"` on `<kj-select>` to bump the trigger to 2.75rem (44px) and meet WCAG 2.5.5 for touch-first layouts. Options have padding-only sizing and rely on their text affordance.\n *\n * @doc-a11y\n * The listbox follows the WAI-ARIA combobox/listbox pattern. The panel is\n * portalled to `document.body` so it escapes clipping ancestors while still\n * being announced as the trigger's popup via `aria-controls`. Selection\n * tracking uses `Object.is` so primitive and reference values both work.\n * In single-select mode the panel closes on activation; in multi mode\n * ([multiple]=\"true\") the panel stays open and `aria-multiselectable=\"true\"`\n * is exposed for assistive tech.\n *\n * @doc-related combobox,cascade-select,radio-group\n *\n * @doc-example Default\n * A single-value fruit picker — the bare-minimum recipe.\n * @doc-file select.default.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — placeholder, pre-selected,\n * and disabled. Use this as the copy-paste starting point.\n * @doc-file select.usage.example.ts\n * @doc-example With placeholder\n * `placeholder=\"…\"` is shown until a value is bound.\n * @doc-file select.placeholder.example.ts\n * @doc-example Disabled\n * `[disabled]=\"true\"` removes the trigger from the tab order.\n * @doc-file select.disabled.example.ts\n * @doc-example Grouped options\n * Cluster options under headings for richer listbox menus.\n * @doc-file select.grouped.example.ts\n * @doc-category Library/Data input\n * @doc\n * @doc-name select\n * @doc-description Themed dropdown select with a trigger button, listbox panel, and keyboard navigation.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-select',\n standalone: true,\n hostDirectives: [\n { directive: KjSelect, inputs: ['kjSelectValue: value'], outputs: ['kjSelectValueChange: valueChange'] },\n ],\n imports: [KjSelectTrigger, KjSelectContent],\n template: `\n <button type=\"button\" kjSelectTrigger #trig=\"kjSelectTrigger\" class=\"kj-select-trigger\" aria-haspopup=\"listbox\" [disabled]=\"disabled() || null\" [kjMultiple]=\"multiple()\">\n <span class=\"kj-select-trigger-label\">{{ displayLabel() }}</span>\n <span class=\"kj-select-trigger-caret\" aria-hidden=\"true\">▾</span>\n </button>\n <kj-select-content [kjFor]=\"trig\" class=\"kj-select-content\">\n <ng-content />\n </kj-select-content>\n `,\n styleUrl: './select.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-select',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n '[attr.data-multiple]': \"multiple() ? '' : null\",\n '[attr.data-size]': \"kjSize() === 'md' ? null : kjSize()\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSelectComponent {\n readonly placeholder = input<string>('Select…');\n readonly disabled = input(false);\n readonly multiple = input(false);\n readonly kjSize = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n\n private readonly select = inject(KjSelect);\n\n /**\n * Trigger element signal — sourced from the headless `KjSelect` root,\n * which is set the moment the inner `KjSelectTrigger` directive\n * constructs. No view-query lifecycle wait, so callers reading this\n * inside an `effect()` see it resolve as soon as the select is mounted.\n */\n readonly triggerEl = this.select.triggerEl;\n\n /** Focus the trigger button. Delegates to the headless root. */\n focus(): void {\n this.select.focus();\n }\n\n /** Direct projection-child query — every `<kj-option>` placed inside this\n * `<kj-select>` registers here. `forwardRef` is required because\n * `KjOptionComponent` is declared later in the same file. We resolve the\n * trigger label by matching the active value against each option's\n * `value` input, not by reading `KjListItem.label()` from the select's\n * deeper content (which doesn't reliably descend into a projected\n * component's view). */\n private readonly options = contentChildren<KjOptionComponent>(\n forwardRef(() => KjOptionComponent) as unknown as typeof KjOptionComponent,\n );\n\n /** Resolve a value to its matching option's label. Falls back to\n * `String(v)` only when no option has registered for that value yet. */\n private labelFor(v: unknown): string {\n for (const opt of this.options()) {\n if (Object.is(opt.value(), v)) {\n const explicit = opt.kjLabel();\n return explicit || String(v);\n }\n }\n return String(v);\n }\n\n readonly displayLabel = computed(() => {\n const v = this.select.value();\n if (v === undefined || v === null || v === '') return this.placeholder();\n if (Array.isArray(v)) {\n return v.length === 0\n ? this.placeholder()\n : v.map((entry) => this.labelFor(entry)).join(', ');\n }\n return this.labelFor(v);\n });\n}\n\n/**\n * Single option row.\n * @doc\n * @doc-name select\n */\n@Component({\n selector: 'kj-option',\n standalone: true,\n imports: [KjOption],\n template: `<div kjOption [kjOptionValue]=\"value()\" [kjOptionLabel]=\"kjLabel()\" class=\"kj-option\"><ng-content /></div>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjOptionComponent {\n readonly value = input.required<unknown>();\n\n /** Explicit label for the trigger's displayed text. The select wrapper\n * reads this via its own `contentChildren(KjOptionComponent)` query for\n * reliable label resolution that doesn't depend on KjListItem's\n * textContent-after-content-init lifecycle. */\n readonly kjLabel = input<string>('');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { KjSkeleton, type KjSkeletonAnimation, type KjSkeletonShape } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjSkeleton` directive.\n *\n * Composes `KjSkeleton` via `hostDirectives` with `kj`-prefixed input\n * aliasing (`kjSkeletonShape`, `kjSkeletonAnimation`). The directive's\n * host bindings — `aria-hidden=\"true\"`, `data-shape`, `data-animation` —\n * land directly on the `<kj-skeleton>` host so theme CSS in\n * `skeleton.css` paints the surface, runs the shimmer / pulse keyframes,\n * and honours `prefers-reduced-motion` against the same element. The\n * wrapper deliberately keeps a real (non-`display: contents`) host\n * because the host *is* the painted skeleton.\n *\n * For the `text-block` shape the wrapper expands its inner template into\n * N stacked text-shaped child skeletons (default 3, last at 60% width)\n * since multi-line composition can't be carried by a single element. The\n * outer host still reflects `data-shape=\"text-block\"` so themes can opt\n * out of the rectangle paint when stacking lines.\n *\n * The wrapper has no `<ng-content/>` — projecting real content into a\n * skeleton is a bug, not a feature. The parent region carries the\n * loading semantics (`aria-busy`, `role=\"status\"` live region); the\n * skeleton itself stays silent.\n *\n * @example\n * ```html\n * <kj-skeleton kjSkeletonShape=\"text\" kjWidth=\"12rem\" />\n * <kj-skeleton kjSkeletonShape=\"circle\" kjWidth=\"40px\" kjHeight=\"40px\" />\n * <kj-skeleton kjSkeletonShape=\"text-block\" [kjLines]=\"4\" />\n * ```\n * @doc-example Default\n * A single rectangle placeholder — the bare-minimum recipe.\n * @doc-file skeleton.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — avatar + lines and card\n * preview. Use this as the copy-paste starting point.\n * @doc-file skeleton.usage.example.ts\n * @doc-example Shapes\n * `rectangle`, `circle`, `text`, `text-block` — pick the cadence that fits.\n * @doc-file skeleton.shapes.example.ts\n * @doc-example Animations\n * `shimmer`, `pulse`, `none` — collapse under `prefers-reduced-motion`.\n * @doc-file skeleton.animations.example.ts\n * @doc-example Card\n * A complete card composition while data is loading.\n * @doc-file skeleton.card.example.ts\n *\n * @doc-aria\n * aria-hidden=\"true\" — Set on the skeleton host (decorative; semantics live on the parent region)\n * data-shape — Mirrors the shape preset for theme hooks\n * data-animation — Mirrors the animation preset for theme hooks\n *\n * @doc-touch\n * The skeleton is non-interactive — no touch target rules apply. The\n * parent region should carry `aria-busy=\"true\"` while loading.\n *\n * @doc-a11y\n * The wrapper sets `aria-hidden=\"true\"` so the placeholder is invisible\n * to AT. The parent region owns the loading semantics — typically a\n * `role=\"status\"` live region with `aria-busy=\"true\"` while the data is\n * in-flight. Animations collapse under `prefers-reduced-motion: reduce`.\n *\n * @doc-related spinner,progress-bar,empty-state\n *\n * @doc-css-var\n * --kj-skeleton-bg — Surface background of the placeholder block.\n * --kj-skeleton-highlight — Highlight gradient color used by the shimmer sweep.\n * --kj-skeleton-radius — Corner radius for rectangle/text shapes.\n * --kj-skeleton-line-height — Per-line block size for text and text-block shapes.\n * --kj-skeleton-line-radius — Corner radius applied to text lines.\n * --kj-skeleton-shimmer-duration — One-sweep duration of the shimmer animation.\n * --kj-skeleton-pulse-duration — One-cycle duration of the pulse animation.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name skeleton\n * @doc-description Themed loading placeholder with rectangle, circle, text, and text-block shapes.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-skeleton',\n standalone: true,\n hostDirectives: [\n {\n directive: KjSkeleton,\n inputs: ['kjSkeletonShape', 'kjSkeletonAnimation'],\n },\n ],\n imports: [KjSkeleton],\n template: `\n @if (isTextBlock()) {\n @for (line of lineWidths(); track $index) {\n <span\n kjSkeleton\n class=\"kj-skeleton kj-skeleton--line\"\n [kjSkeletonShape]=\"'text'\"\n [kjSkeletonAnimation]=\"kjSkeletonAnimation()\"\n [style.width]=\"line\"\n ></span>\n }\n }\n `,\n styleUrl: './skeleton.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-skeleton',\n '[style.width]': 'kjWidth()',\n '[style.height]': 'kjHeight()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSkeletonComponent {\n /**\n * Visual shape preset. Aliased onto the composed `KjSkeleton` directive,\n * which reflects the value to `data-shape` on this host element.\n */\n readonly kjSkeletonShape = input<KjSkeletonShape>('rectangle');\n\n /**\n * Animation preset. Aliased onto the composed `KjSkeleton` directive,\n * which reflects the value to `data-animation` on this host element.\n */\n readonly kjSkeletonAnimation = input<KjSkeletonAnimation>('shimmer');\n\n /** Optional inline width applied as `style.width` on the host. */\n readonly kjWidth = input<string | undefined>(undefined);\n\n /** Optional inline height applied as `style.height` on the host. */\n readonly kjHeight = input<string | undefined>(undefined);\n\n /**\n * Number of lines rendered when `kjSkeletonShape === 'text-block'`.\n * Ignored for every other shape. Defaults to 3, with the last line at\n * 60% width to match typographic cadence.\n */\n readonly kjLines = input<number>(3);\n\n /** True when the wrapper should render its multi-line text-block template. */\n protected readonly isTextBlock = computed(() => this.kjSkeletonShape() === 'text-block');\n\n /**\n * Pre-computed widths for the `text-block` line cadence: every line is\n * `100%` except the last (when more than one line), which is `60%`.\n */\n protected readonly lineWidths = computed<readonly string[]>(() => {\n const count = Math.max(1, Math.floor(this.kjLines()));\n const widths: string[] = [];\n for (let i = 0; i < count; i++) {\n widths.push(i === count - 1 && count > 1 ? '60%' : '100%');\n }\n return widths;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n model,\n} from '@angular/core';\nimport {\n KjSlider,\n KjSliderRange,\n KjSliderThumb,\n KjSliderTrack,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjSlider` directive family.\n *\n * The host is `display: contents` — the directive's `[kjSlider]` lives on\n * an inner `<div>` that renders the track, fill, ticks, and one or two\n * focusable thumbs. Switch between single-thumb and range mode via the\n * model bindings: bind `[(kjValue)]` for single (number), or\n * `[(kjRange)]` for range (`[number, number]`).\n *\n * Inputs forward 1:1 to the directives below — bounds (`kjMin`, `kjMax`,\n * `kjStep`, `kjPageStep`), orientation, RTL/inversion, range coordination\n * (`kjMinDistance`, `kjAllowThumbCross`), tick definition, and the\n * `aria-valuetext` formatter (`kjDisplayWith`). Per-thumb accessible\n * names use `kjAriaLabel` (single) or `kjStartAriaLabel` /\n * `kjEndAriaLabel` (range).\n *\n * @doc-example Default\n * A single-thumb 0–100 volume slider — the bare-minimum recipe.\n * @doc-file slider.example.ts\n * @doc-example Usage\n * A walkthrough of the most common usages — volume, price range, and a\n * stepped rating selector. Use this as the copy-paste starting point.\n * @doc-file slider.usage.example.ts\n * @doc-example Range (two thumbs)\n * `[(kjRange)]` switches to two-thumb mode with min-distance coordination.\n * @doc-file slider.range.example.ts\n * @doc-example With tick marks\n * `kjTicks=\"auto\"` or a numeric array renders tick glyphs along the track.\n * @doc-file slider.with-marks.example.ts\n * @doc-example Vertical\n * `kjOrientation=\"vertical\"` flips the track and arrow-key mapping.\n * @doc-file slider.vertical.example.ts\n * @doc-example Formatted value (Intl.NumberFormat)\n * `kjDisplayWith` shapes `aria-valuetext` for currency / unit / percent.\n * @doc-file slider.formatted.example.ts\n *\n * @doc-keyboard\n * ArrowRight|ArrowUp — Increment focused thumb by `kjStep`\n * ArrowLeft|ArrowDown — Decrement focused thumb by `kjStep`\n * PageUp — Increment by `kjPageStep` (when > 0)\n * PageDown — Decrement by `kjPageStep` (when > 0)\n * Home — Jump to `kjMin`\n * End — Jump to `kjMax`\n * Tab — Moves focus between thumbs (range mode) and out\n *\n * @doc-aria\n * role=\"slider\" — On each thumb `<button>`\n * aria-valuemin — Reflects `kjMin`\n * aria-valuemax — Reflects `kjMax`\n * aria-valuenow — Reflects the thumb's current value\n * aria-valuetext — Reflects `kjDisplayWith(value, thumbIndex)`\n * aria-orientation — Reflects `horizontal` / `vertical`\n * aria-label — Wired from `kjAriaLabel` (single) or `kjStartAriaLabel` / `kjEndAriaLabel` (range)\n * aria-disabled — Reflected on thumbs when `kjDisabled` is true\n *\n * @doc-touch\n * Thumbs render at 1.25rem with a 44×44 hit-target halo via padding —\n * meets WCAG 2.5.5 on touch devices. The track itself accepts click-to-jump.\n *\n * @doc-a11y\n * Thumbs are real `<button>` elements so native focus, click, and form\n * semantics work. Each thumb owns its own accessible name — in range\n * mode use distinct `kjStartAriaLabel` / `kjEndAriaLabel` so SR users can\n * tell them apart. Pair with a visible `aria-valuetext` formatter when\n * the raw number is ambiguous (currency, dates, percentages).\n *\n * @doc-related number-input,progress-bar,form\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name slider\n * @doc-description Themed single or range slider with ticks, vertical orientation, and Intl-formatted values.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-slider',\n standalone: true,\n imports: [KjSlider, KjSliderTrack, KjSliderRange, KjSliderThumb],\n template: `\n <div\n kjSlider\n class=\"kj-slider\"\n [(kjValue)]=\"kjValue\"\n [kjRange]=\"kjRange() ?? null!\"\n (kjRangeChange)=\"kjRange.set($event)\"\n [kjMin]=\"kjMin()\"\n [kjMax]=\"kjMax()\"\n [kjStep]=\"kjStep()\"\n [kjPageStep]=\"kjPageStep()\"\n [kjStepBase]=\"kjStepBase()\"\n [kjOrientation]=\"kjOrientation()\"\n [kjDirection]=\"kjDirection()\"\n [kjInverted]=\"kjInverted()\"\n [kjMinDistance]=\"kjMinDistance()\"\n [kjAllowThumbCross]=\"kjAllowThumbCross()\"\n [kjTicks]=\"kjTicks()\"\n [kjDisplayWith]=\"kjDisplayWith()\"\n [kjReadonly]=\"kjReadonly()\"\n [kjDisabled]=\"kjDisabled()\"\n >\n <div kjSliderTrack class=\"kj-slider__track\">\n <div kjSliderRange class=\"kj-slider__range\"></div>\n\n @if (resolvedTicks().length > 0) {\n <div class=\"kj-slider__ticks\" aria-hidden=\"true\">\n @for (t of resolvedTicks(); track t.value) {\n <span\n class=\"kj-slider__tick\"\n [style.--kj-slider-tick-fraction]=\"t.fraction\"\n ></span>\n }\n </div>\n }\n\n @if (isRange()) {\n <!--\n In range mode, the root's [(kjRange)] fans out to both\n thumbs via the KjSlider directive's range effect after\n DOM-order sort. We do not pass [kjValue] here because the\n DOM-order resolution runs in afterNextRender (the elements\n are not yet connected at directive-construction time), so\n the root is the canonical writer.\n -->\n <button\n type=\"button\"\n kjSliderThumb\n class=\"kj-slider__thumb\"\n [attr.aria-label]=\"kjStartAriaLabel()\"\n [kjAriaLabel]=\"kjStartAriaLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n ></button>\n <button\n type=\"button\"\n kjSliderThumb\n class=\"kj-slider__thumb\"\n [attr.aria-label]=\"kjEndAriaLabel()\"\n [kjAriaLabel]=\"kjEndAriaLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n ></button>\n } @else {\n <button\n type=\"button\"\n kjSliderThumb\n class=\"kj-slider__thumb\"\n [kjValue]=\"singleValue()\"\n [attr.aria-label]=\"kjAriaLabel()\"\n [kjAriaLabel]=\"kjAriaLabel()\"\n [kjDisabled]=\"kjDisabled()\"\n ></button>\n }\n </div>\n </div>\n `,\n styleUrl: './slider.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSliderComponent {\n /** Single-thumb value. Mutually exclusive with `kjRange`. */\n readonly kjValue = model<number>(0);\n\n /** Range-mode value tuple. Setting this switches to two-thumb mode. */\n readonly kjRange = model<readonly [number, number] | undefined>(undefined);\n\n readonly kjMin = input<number>(0);\n readonly kjMax = input<number>(100);\n readonly kjStep = input<number>(1);\n readonly kjPageStep = input<number>(0);\n readonly kjStepBase = input<number>(0);\n\n readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');\n readonly kjDirection = input<'ltr' | 'rtl' | 'auto'>('auto');\n readonly kjInverted = input(false, { transform: booleanAttribute });\n\n readonly kjMinDistance = input<number>(0);\n readonly kjAllowThumbCross = input(false, { transform: booleanAttribute });\n\n readonly kjTicks = input<readonly number[] | 'auto' | false>(false);\n\n readonly kjDisplayWith = input<(value: number, thumbIndex: number) => string>(\n (value: number) => String(value),\n );\n\n readonly kjReadonly = input(false, { transform: booleanAttribute });\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Single-mode accessible label. */\n readonly kjAriaLabel = input<string>('');\n\n /** Range-mode accessible label for the lower thumb. */\n readonly kjStartAriaLabel = input<string>('Minimum');\n\n /** Range-mode accessible label for the upper thumb. */\n readonly kjEndAriaLabel = input<string>('Maximum');\n\n /** True when the consumer has bound `[(kjRange)]` or set both bounds. */\n protected readonly isRange = computed(() => this.kjRange() !== undefined);\n\n protected readonly singleValue = computed(() => this.kjValue() ?? this.kjMin());\n protected readonly rangeLow = computed(() => this.kjRange()?.[0] ?? this.kjMin());\n protected readonly rangeHigh = computed(() => this.kjRange()?.[1] ?? this.kjMax());\n\n /** Tick array resolved into `{ value, fraction }` for the wrapper to render. */\n protected readonly resolvedTicks = computed(() => {\n const t = this.kjTicks();\n const min = this.kjMin();\n const max = this.kjMax();\n const step = this.kjStep();\n const inverted = this.kjInverted();\n const range = max - min;\n if (range <= 0) return [];\n\n let values: number[] = [];\n if (t === false) values = [];\n else if (Array.isArray(t)) values = [...t];\n else if (t === 'auto' && step > 0) {\n const count = Math.floor(range / step) + 1;\n if (count > 100) return [];\n for (let i = 0; i < count; i++) values.push(min + i * step);\n }\n return values.map((v) => {\n let f = (v - min) / range;\n if (f < 0) f = 0;\n else if (f > 1) f = 1;\n if (inverted) f = 1 - f;\n return { value: v, fraction: f };\n });\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport {\n KjButton,\n KjSpeedDial,\n KjSpeedDialAction,\n KjSpeedDialActions,\n KjSpeedDialTrigger,\n type KjSpeedDialDirection,\n} from '@kouji-ui/core';\n\n/** Where to anchor the Speed Dial within its scroll container. */\nexport type KjSpeedDialPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'top-right'\n | 'top-left'\n | 'static';\n\n/**\n * Styled wrapper around the headless `KjSpeedDial` directive.\n *\n * Renders a viewport-anchored floating action button (FAB) that, when clicked,\n * fans out a cluster of action buttons — composed from `<kj-speed-dial-trigger>`\n * and one or more `<kj-speed-dial-action>` children inside a\n * `<kj-speed-dial-actions>` container. Theme tokens drive the FAB's circular\n * shape, elevation, and the cluster's fan-out animation.\n *\n * `kjPosition` controls the anchor: `'bottom-right'` (default) places the FAB\n * fixed to the bottom-right of the viewport. Use `'static'` to embed inline.\n *\n * @example\n * ```html\n * <kj-speed-dial kjDirection=\"up\" kjPosition=\"bottom-right\">\n * <kj-speed-dial-trigger kjAriaLabel=\"Open menu\">+</kj-speed-dial-trigger>\n * <kj-speed-dial-actions>\n * <kj-speed-dial-action kjAriaLabel=\"Edit\">E</kj-speed-dial-action>\n * <kj-speed-dial-action kjAriaLabel=\"Share\">S</kj-speed-dial-action>\n * </kj-speed-dial-actions>\n * </kj-speed-dial>\n * ```\n *\n * @doc-example Default\n * The default playground — bottom-right anchored FAB fanning up.\n * @doc-file speed-dial.example.ts\n * @doc-example Usage\n * A walkthrough of the most common speed-dial usages — direction, position,\n * disabled state, and per-action handlers. Copy-paste starting point.\n * @doc-file speed-dial.usage.example.ts\n * @doc-example Directions\n * `kjDirection` controls the fan-out axis — `up`, `down`, `left`, `right`.\n * @doc-file speed-dial.directions.example.ts\n * @doc-example With tooltips\n * Pair each action with a `<kj-tooltip-content>` for label-on-hover.\n * @doc-file speed-dial.with-tooltips.example.ts\n * @doc-example Disabled\n * `[kjDisabled]=\"true\"` on the root disables the trigger and all actions.\n * @doc-file speed-dial.disabled.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Opens the dial when on the trigger; activates the focused action\n * ArrowKeys — Move focus along the fan-out axis between trigger and actions\n * Escape — Closes the dial and returns focus to the trigger\n * Tab — Single tab stop on the trigger (roving tabindex inside)\n *\n * @doc-aria\n * role=\"menu\" — applied to `<kj-speed-dial-actions>` while open\n * role=\"menuitem\" — applied to each `<kj-speed-dial-action>`\n * aria-haspopup — set on the trigger to \"menu\"\n * aria-expanded — reflects the open/closed state on the trigger\n * aria-label — required on icon-only trigger and actions (dev-mode warns)\n * data-position — mirrors `kjPosition` on the host for CSS hooks\n *\n * @doc-touch\n * Trigger defaults to `kjSize=\"lg\"` (48px) — meets WCAG 2.5.5 (≥ 44×44).\n * Actions default to `kjSize=\"md\"` (40px) — bump to `lg` for touch-first layouts.\n *\n * @doc-a11y\n * Implements the WAI-ARIA Menu Button APG pattern. Roving tabindex keeps the\n * trigger as a single Tab stop; arrow keys move focus through the open\n * action cluster. Focus returns to the trigger on close. Activating an\n * action closes the dial by default (`kjCloseOnActivate`).\n *\n * @doc-related dropdown-menu,tooltip,button-group\n *\n * @doc-css-var\n * --kj-speed-dial-gap — Gap between the trigger and the action cluster.\n * --kj-speed-dial-edge — Distance from the viewport edge when fixed-positioned.\n * --kj-speed-dial-trigger-size — Width/height of the circular FAB trigger.\n * --kj-speed-dial-action-size — Width/height of each fan-out action button.\n * --kj-speed-dial-shadow — Elevation shadow shared by the trigger and actions.\n * --kj-speed-dial-stagger — Per-action delay applied to the fan-out animation.\n * --kj-speed-dial-duration — Transition duration for the trigger and fan-out motion.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name speed-dial\n * @doc-description Themed floating action button that fans out a cluster of secondary actions on activation.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-speed-dial',\n standalone: true,\n hostDirectives: [\n {\n directive: KjSpeedDial,\n inputs: [\n 'kjDirection',\n 'kjOpen',\n 'kjDisabled',\n 'kjOpenOnHover',\n ],\n outputs: ['kjOpenChange'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './speed-dial.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-speed-dial',\n '[attr.data-position]': 'kjPosition()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSpeedDialComponent {\n /** Anchor for the dial. Default `'bottom-right'`. */\n readonly kjPosition = input<KjSpeedDialPosition>('bottom-right');\n}\n\n/**\n * Styled wrapper around `KjSpeedDialTrigger`.\n *\n * Renders a real `<button kjButton kjSpeedDialTrigger>` so the trigger inherits\n * the kouji button presets (variant, size, focus ring, capture-phase disabled\n * suppression) plus the speed-dial menu-button ARIA wiring.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name speed-dial\n */\n@Component({\n selector: 'kj-speed-dial-trigger',\n standalone: true,\n imports: [KjButton, KjSpeedDialTrigger],\n template: `\n <button\n type=\"button\"\n kjButton\n kjSpeedDialTrigger\n class=\"kj-speed-dial-trigger\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjDisabled]=\"kjDisabled()\"\n [attr.aria-label]=\"kjAriaLabel()\"\n >\n <ng-content />\n </button>\n `,\n styleUrl: './speed-dial.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-speed-dial-trigger-host',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSpeedDialTriggerComponent {\n /** Button variant preset. */\n readonly kjVariant = input('default');\n /** Button size preset. */\n readonly kjSize = input('lg');\n /** Disable the trigger. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n /** Required when the trigger has icon-only contents (it usually does). */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n}\n\n/**\n * Styled wrapper around `KjSpeedDialActions` — the cluster container.\n *\n * Place inside `<kj-speed-dial>` and put one or more\n * `<kj-speed-dial-action>` children inside it. The container itself carries\n * `role=\"menu\"` and is hidden when collapsed.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name speed-dial\n */\n@Component({\n selector: 'kj-speed-dial-actions',\n standalone: true,\n hostDirectives: [KjSpeedDialActions],\n template: `<ng-content />`,\n styleUrl: './speed-dial.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-speed-dial-actions' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSpeedDialActionsComponent {}\n\n/**\n * Styled wrapper around `KjSpeedDialAction`.\n *\n * Renders a real `<button kjButton kjSpeedDialAction>` so the action inherits\n * the kouji button presets and `role=\"menuitem\"`. Activating an action closes\n * the dial unless `[kjCloseOnActivate]=\"false\"`.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name speed-dial\n */\n@Component({\n selector: 'kj-speed-dial-action',\n standalone: true,\n imports: [KjButton, KjSpeedDialAction],\n template: `\n <button\n type=\"button\"\n kjButton\n kjSpeedDialAction\n class=\"kj-speed-dial-action\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjCloseOnActivate]=\"kjCloseOnActivate()\"\n [attr.aria-label]=\"kjAriaLabel()\"\n >\n <ng-content />\n </button>\n `,\n styleUrl: './speed-dial.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-speed-dial-action-host',\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSpeedDialActionComponent {\n /** Button variant preset. Defaults to `outline`. */\n readonly kjVariant = input('outline');\n /** Button size preset. Defaults to `md` (one step smaller than the trigger). */\n readonly kjSize = input('md');\n /** Disable the action. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n /** Whether activating closes the dial. Default `true`. */\n readonly kjCloseOnActivate = input(true, { transform: booleanAttribute });\n /** Required when the action has icon-only contents. */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n}\n\nexport type { KjSpeedDialDirection };\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { KjSpinner, type KjSpinnerAnimation, KjVisuallyHidden } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjSpinner` directive.\n *\n * Composes `KjSpinner` via `hostDirectives` so the wrapper's host element is\n * *the* spinner — `role=\"status\"`, `aria-live=\"polite\"`, `aria-atomic=\"true\"`,\n * the `aria-label` default (\"Loading\"), `data-animation`, and\n * `data-reduced-motion` all land on `<kj-spinner>` itself. `kjVariant` and\n * `kjSize` are wrapper-level inputs that the host mirrors to `data-variant` /\n * `data-size` (the directive's own nested `KjVariant` / `KjSize` host\n * directives are not transitively exposed through outer composition, so the\n * wrapper takes over the data-attribute reflection at this layer).\n *\n * The template renders an `aria-hidden` glyph element (the visual shape that\n * theme CSS keyframes drive per `data-animation`) and, when no\n * `aria-labelledby` was authored on the host, a `kjVisuallyHidden` label so\n * AT always finds an accessible name.\n *\n * **Indeterminate-only.** The spinner answers \"something is happening\" — it\n * has no value model. For \"x of y\" use Progress Bar; for missing-content\n * placeholders use Skeleton.\n *\n * @example\n * ```html\n * <kj-spinner />\n * <kj-spinner kjVariant=\"primary\" kjSize=\"lg\" kjAnimation=\"dots\" kjAriaLabel=\"Sending\" />\n * ```\n * @doc-example Default\n * The default playground — `spin` animation, `md` size, neutral variant,\n * default `aria-label=\"Loading\"`.\n * @doc-file spinner.example.ts\n * @doc-example Usage\n * A walkthrough of the most common spinner usages — size, variant,\n * animation glyph, and inline placement next to copy.\n * @doc-file spinner.usage.example.ts\n * @doc-example Sizes\n * `xs` / `sm` / `md` / `lg` presets. There is intentionally no `xl` — that\n * size almost always wants a determinate Progress Bar instead.\n * @doc-file spinner.sizes.example.ts\n * @doc-example Variants\n * `neutral` (inherits `currentColor`), `primary`, `success`, `warning`,\n * `error`, `info`.\n * @doc-file spinner.variants.example.ts\n * @doc-example Animations\n * Animation shape preset — `spin`, `dots`, `bars`, etc. Themes own the\n * keyframes per value.\n * @doc-file spinner.animations.example.ts\n * @doc-example Inside a button\n * Embed the spinner inline next to a label to communicate in-flight work.\n * @doc-file spinner.in-button.example.ts\n *\n * @doc-keyboard\n * — — Non-interactive. The spinner is purely a status indicator.\n *\n * @doc-aria\n * role=\"status\" — set on the host so AT announces it as a live status region\n * aria-live — \"polite\" so the label is read without interrupting the user\n * aria-atomic — \"true\" so the full label is announced on change\n * aria-label — Defaults to \"Loading\"; override per context (e.g. \"Sending\")\n * data-animation — Mirrors the resolved animation for theme hooks\n * data-variant — Mirrors the resolved variant for theme hooks\n * data-size — Mirrors the resolved size for theme hooks\n *\n * @doc-touch\n * — — Non-interactive; no touch target required.\n *\n * @doc-a11y\n * Indeterminate-only — answers \"something is happening\", with no value model.\n * Honours `prefers-reduced-motion` via `data-reduced-motion` on the host, so\n * themes can swap a calmer animation. When the consumer authors\n * `aria-labelledby` on the host the wrapper skips the visually-hidden label\n * to avoid double-naming.\n *\n * @doc-related progress-bar,skeleton,toast\n *\n * @doc-css-var\n * --kj-spinner-size — Glyph diameter. Sizes (xs/sm/md/lg) override.\n * --kj-spinner-color — Foreground color of the glyph. Variants set this; neutral inherits currentColor.\n * --kj-spinner-track — Track/background color for the spin arc.\n * --kj-spinner-duration — Base animation duration. Other animations scale off this.\n *\n * @doc-category Library/Feedback\n * @doc\n * @doc-name spinner\n * @doc-description Themed indeterminate loading spinner with variant, size, and animation glyph options.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-spinner',\n standalone: true,\n imports: [KjVisuallyHidden],\n hostDirectives: [\n {\n directive: KjSpinner,\n // KjSpinner's own surface — kjVariant + kjSize live on its nested\n // KjVariant / KjSize and are not surfaced through this outer\n // composition; they are re-exposed as wrapper inputs below and wired\n // straight to the host's data-variant / data-size attributes.\n inputs: ['kjAnimation', 'kjAriaLabel'],\n },\n ],\n template: `\n <span class=\"kj-spinner__glyph\" aria-hidden=\"true\"></span>\n @if (shouldRenderHiddenLabel()) {\n <span kjVisuallyHidden>{{ kjAriaLabel() }}</span>\n }\n `,\n styleUrl: './spinner.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-spinner',\n '[attr.data-variant]': 'kjVariant()',\n '[attr.data-size]': 'kjSize()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSpinnerComponent {\n /**\n * Color preset reflected to `data-variant` on the host. Defaults to\n * `'neutral'`, which resolves to `currentColor` in shipped themes — so a\n * spinner inside a coloured surface inherits its parent's text colour.\n */\n readonly kjVariant = input<string>('neutral');\n\n /**\n * Size preset reflected to `data-size` on the host. Defaults to `'md'`.\n * Sizes ship as `xs | sm | md | lg`; an `xl` is intentionally absent — a\n * spinner that big almost always wants a determinate Progress Bar instead.\n */\n readonly kjSize = input<string>('md');\n\n /**\n * Animation shape preset forwarded to `KjSpinner.kjAnimation` via the\n * composed host directive. Reflects on the host as `data-animation`.\n * Themes own the keyframes per value.\n */\n readonly kjAnimation = input<KjSpinnerAnimation>('spin');\n\n /**\n * Accessible name forwarded to `KjSpinner.kjAriaLabel` via the composed\n * host directive. Default `'Loading'`. Used both as the host's\n * `aria-label` and as the visually-hidden text rendered inside the\n * wrapper when no consumer-authored `aria-labelledby` is on the element.\n */\n readonly kjAriaLabel = input<string>('Loading');\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Snapshotted at construction: did the consumer author `aria-labelledby`\n * directly on `<kj-spinner>`? If so the accessible name is the referenced\n * element and we must not project a hidden duplicate. Read in the\n * constructor — by the time the template renders the directive may have\n * stamped its own attributes on the host.\n */\n private readonly hasAuthoredLabelledBy: boolean;\n\n /**\n * `true` when the consumer did **not** author `aria-labelledby` on the\n * wrapper — i.e. the spinner's accessible name is its `aria-label`. The\n * wrapper renders a `kjVisuallyHidden` copy of the label as inner text so\n * AT that prefers content over `aria-label` (or that announces a\n * `role=\"status\"` region's body on insertion) still has a name to read.\n * A consumer-authored `aria-labelledby` opts out of that hidden copy to\n * avoid double-naming the host.\n */\n protected readonly shouldRenderHiddenLabel = computed(\n () => !this.hasAuthoredLabelledBy,\n );\n\n constructor() {\n this.hasAuthoredLabelledBy =\n this.el.nativeElement.hasAttribute('aria-labelledby');\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport {\n KjStep,\n KjStepContent,\n KjStepLabel,\n KjStepper,\n KjStepperNext,\n KjStepperPrevious,\n KjStepperReset,\n} from '@kouji-ui/core';\n\n/**\n * Styled root wrapper around the headless `KjStepper` directive.\n *\n * Renders an `<ol>` host carrying the directive, projects `<kj-step>` children,\n * and exposes the same kj-prefixed inputs as the directive — `kjActiveStep`\n * (two-way), `kjLinear`, `kjOrientation`, `kjLoop`, `kjArrowNavigation`,\n * `kjResetStepStates`.\n *\n * @example\n * ```html\n * <kj-stepper [(kjActiveStep)]=\"step\" [kjLinear]=\"true\">\n * <kj-step [kjStepCompleted]=\"form1.valid()\">\n * <kj-step-label>Account</kj-step-label>\n * <kj-step-content>...</kj-step-content>\n * </kj-step>\n * <kj-step>\n * <kj-step-label>Confirm</kj-step-label>\n * <kj-step-content>...</kj-step-content>\n * </kj-step>\n * </kj-stepper>\n * ```\n *\n * @doc-example Default\n * The default playground — three-step linear wizard with completion gating.\n * @doc-file stepper.example.ts\n * @doc-example Usage\n * A walkthrough of the most common stepper usages — linear vs non-linear,\n * active step tracking, and Next / Previous / Reset commands.\n * @doc-file stepper.usage.example.ts\n * @doc-example Non-linear\n * `[kjLinear]=\"false\"` lets the user jump to any step regardless of order.\n * @doc-file stepper.non-linear.example.ts\n * @doc-example Vertical\n * `kjOrientation=\"vertical\"` stacks the steps top-to-bottom.\n * @doc-file stepper.vertical.example.ts\n * @doc-example With error\n * `[kjStepError]=\"true\"` marks a step as failed; theme swaps the indicator.\n * @doc-file stepper.with-error.example.ts\n * @doc-example Optional step\n * `[kjStepOptional]=\"true\"` lets the user skip without blocking advancement.\n * @doc-file stepper.optional-step.example.ts\n *\n * @doc-keyboard\n * ArrowRight|ArrowDown — Moves focus to the next step label (orientation-aware)\n * ArrowLeft|ArrowUp — Moves focus to the previous step label\n * Home — Moves focus to the first step\n * End — Moves focus to the last step\n * Enter|Space — Activates the focused step label (gated by `kjLinear`)\n * Tab — Leaves the step list and moves into the active step content\n *\n * @doc-aria\n * role=\"list\" — applied to the `<ol>` host of `<kj-stepper>`\n * aria-current=\"step\" — set on the active step indicator\n * aria-disabled — set on steps that cannot be activated (linear + uncompleted)\n * aria-orientation — reflects `kjOrientation` (\"horizontal\" | \"vertical\")\n * hidden / inert — applied to inactive `<kj-step-content>` panels\n *\n * @doc-touch\n * Step labels default to a ~44px hit area at `md` density. Pair with\n * `kjOrientation=\"vertical\"` on narrow viewports so labels stay tappable.\n *\n * @doc-a11y\n * Implements the WAI-ARIA Wizard pattern. Roving tabindex via\n * `KjRovingTabindex` keeps the step list as a single Tab stop; arrow keys\n * move focus between labels. Linear mode disables steps the user has not\n * yet earned — non-linear mode treats every step as freely reachable.\n *\n * @doc-related tabs,progress-bar,form\n *\n * @doc-css-var\n * --kj-stepper-gap — Vertical gap between steps in the list.\n * --kj-stepper-indicator-size — Diameter of the numbered step indicator circle.\n * --kj-stepper-bg — Default step indicator background.\n * --kj-stepper-border — Default step indicator and content border color.\n * --kj-stepper-active — Background/border color for the active step indicator.\n * --kj-stepper-active-fg — Foreground color rendered on top of the active indicator.\n * --kj-stepper-completed — Background color for steps marked completed (with check mark).\n * --kj-stepper-error — Background color for steps marked in error state.\n * --kj-stepper-muted — Foreground color for inactive step labels.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name stepper\n * @doc-description Themed multi-step wizard with linear or non-linear progression and built-in navigation controls.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-stepper',\n standalone: true,\n hostDirectives: [\n {\n directive: KjStepper,\n inputs: [\n 'kjActiveStep',\n 'kjLinear',\n 'kjOrientation',\n 'kjLoop',\n 'kjArrowNavigation',\n 'kjResetStepStates',\n ],\n outputs: ['kjActiveStepChange'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './stepper.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-stepper',\n role: 'list',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepperComponent {}\n\n/**\n * Single step within a `<kj-stepper>`. Forwards completion / error / optional /\n * disabled / key state down to the headless `KjStep` directive.\n *\n * Project a `<kj-step-label>` and (optionally) a `<kj-step-content>` inside.\n * @doc\n * @doc-name stepper\n */\n@Component({\n selector: 'kj-step',\n standalone: true,\n hostDirectives: [\n {\n directive: KjStep,\n inputs: [\n 'kjStepCompleted',\n 'kjStepError',\n 'kjStepOptional',\n 'kjStepDisabled',\n 'kjStepKey',\n ],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-step' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepComponent {}\n\n/**\n * Header / clickable label for a `<kj-step>`. Renders an inner `<button>`\n * carrying `[kjStepLabel]` so APG wizard semantics and roving tabindex\n * stay correct.\n * @doc\n * @doc-name stepper\n */\n@Component({\n selector: 'kj-step-label',\n standalone: true,\n imports: [KjStepLabel],\n template: `<button type=\"button\" kjStepLabel class=\"kj-step__label\"><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepLabelComponent {}\n\n/**\n * Content panel for a `<kj-step>`. Renders an inner `<section>` carrying\n * `[kjStepContent]`; the directive host-binds `[hidden]` / `[inert]` so the\n * panel is visible only when its parent step is active.\n * @doc\n * @doc-name stepper\n */\n@Component({\n selector: 'kj-step-content',\n standalone: true,\n imports: [KjStepContent],\n template: `<section kjStepContent class=\"kj-step__content\"><ng-content /></section>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepContentComponent {}\n\n/**\n * Stepper-level *Next* command. Renders a `<button>` with `[kjStepperNext]`,\n * which host-binds `[disabled]` from the parent's `canAdvance()`.\n * @doc\n * @doc-name stepper\n */\n@Component({\n selector: 'kj-stepper-next',\n standalone: true,\n imports: [KjStepperNext],\n template: `<button type=\"button\" kjStepperNext class=\"kj-stepper-action kj-stepper-action--next\"><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepperNextComponent {}\n\n/**\n * Stepper-level *Previous* command. Renders a `<button>` with\n * `[kjStepperPrevious]`, which host-binds `[disabled]` from the parent's\n * `canRetreat()`.\n * @doc\n * @doc-name stepper\n */\n@Component({\n selector: 'kj-stepper-previous',\n standalone: true,\n imports: [KjStepperPrevious],\n template: `<button type=\"button\" kjStepperPrevious class=\"kj-stepper-action kj-stepper-action--previous\"><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepperPreviousComponent {}\n\n/**\n * Stepper-level *Reset* command. Renders a `<button>` with `[kjStepperReset]`;\n * never gated.\n * @doc\n * @doc-name stepper\n */\n@Component({\n selector: 'kj-stepper-reset',\n standalone: true,\n imports: [KjStepperReset],\n template: `<button type=\"button\" kjStepperReset class=\"kj-stepper-action kj-stepper-action--reset\"><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjStepperResetComponent {}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n Virtualizer,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n type VirtualItem,\n} from '@tanstack/virtual-core';\n\n/**\n * Mounts a `@tanstack/virtual-core` `Virtualizer` on the host element (the\n * scroll container — typically a wrapper around the table or a tbody-level\n * scroll viewport) and exposes the windowed row list plus top/bottom spacer\n * sizes as signals.\n *\n * Consumers (the styled `<kj-table>` root) read `virtualRows()`,\n * `paddingTop()`, `paddingBottom()` and `totalSize()` to render only the\n * visible window of rows and reserve scrollback/scrollahead space with\n * spacer elements.\n *\n * The virtualizer is mounted after the first render so the host element is\n * laid out before `observeElementRect` / `observeElementOffset` attach. The\n * teardown returned by `_didMount()` is wired through `DestroyRef`.\n *\n * @example\n * ```html\n * <div\n * KjTableVirtual\n * [kjCount]=\"rows().length\"\n * [kjEstimateSize]=\"36\"\n * [kjOverscan]=\"8\"\n * class=\"kj-table-virtual-scroll\"\n * #v=\"KjTableVirtual\"\n * >\n * <div [style.height.px]=\"v.totalSize()\">\n * <div [style.transform]=\"'translateY(' + v.paddingTop() + 'px)'\">\n * @for (vr of v.virtualRows(); track vr.key) {\n * <!-- render row at index vr.index -->\n * }\n * </div>\n * </div>\n * </div>\n * ```\n *\n * @doc-category Components/Data\n * @doc\n * @doc-name table-virtual\n * @doc-description Row virtualization adapter on @tanstack/virtual-core. Exposes virtualRows / paddingTop / paddingBottom / totalSize signals for the styled data table.\n */\n@Directive({\n selector: '[kjTableVirtual]',\n standalone: true,\n exportAs: 'kjTableVirtual',\n})\nexport class KjTableVirtual {\n /** Total number of rows in the underlying dataset. */\n readonly kjCount = input.required<number>();\n /** Estimated px height of a single row, used before measurement. */\n readonly kjEstimateSize = input<number>(36);\n /** Extra rows rendered above and below the visible window. */\n readonly kjOverscan = input<number>(5);\n\n private readonly host = inject(ElementRef<HTMLElement>).nativeElement as HTMLElement;\n private readonly destroyRef = inject(DestroyRef);\n\n private virtualizer: Virtualizer<HTMLElement, HTMLElement> | null = null;\n\n // Writable backing signals; exposed read-only via `asReadonly()` below.\n private readonly _virtualRows = signal<VirtualItem[]>([]);\n private readonly _totalSize = signal<number>(0);\n private readonly _paddingTop = signal<number>(0);\n private readonly _paddingBottom = signal<number>(0);\n\n /** Windowed `VirtualItem`s currently visible (plus overscan). */\n readonly virtualRows = this._virtualRows.asReadonly();\n /** Total px size of the virtual content (used to size the inner spacer). */\n readonly totalSize = this._totalSize.asReadonly();\n /** Top spacer height in px (offset of the first virtual row). */\n readonly paddingTop = this._paddingTop.asReadonly();\n /** Bottom spacer height in px (totalSize − end of last virtual row). */\n readonly paddingBottom = this._paddingBottom.asReadonly();\n\n constructor() {\n afterNextRender(() => this.mount());\n\n // Re-apply options when inputs change. The first run is a no-op because\n // `virtualizer` is null until `mount()` runs after the first render.\n effect(() => {\n const count = this.kjCount();\n const estimate = this.kjEstimateSize();\n const overscan = this.kjOverscan();\n const v = this.virtualizer;\n if (!v) return;\n v.setOptions({\n ...v.options,\n count,\n estimateSize: () => estimate,\n overscan,\n });\n this.sync();\n });\n }\n\n private mount(): void {\n // The virtualizer needs the actual SCROLLABLE ancestor — not the `<tbody>`\n // host, which doesn't scroll in a normal table. We deterministically pick\n // the wrapper's `.kj-table-body` (always present, always the scroller in\n // our table structure) rather than probing computed `overflow-y` at mount\n // time — `getComputedStyle` occasionally returns the pre-flex-applied\n // values from `afterNextRender`, which made the walk miss the scroller\n // and fall back to the 0-height tbody, breaking virtualization entirely.\n // The computed-style walk stays as a secondary fallback for consumers who\n // ever embed `KjTableVirtual` outside a `kj-table`.\n const scrollEl =\n this.host.closest('.kj-table-body') as HTMLElement | null\n ?? this.findScrollAncestor()\n ?? this.host;\n const v = new Virtualizer<HTMLElement, HTMLElement>({\n count: this.kjCount(),\n getScrollElement: () => scrollEl,\n estimateSize: () => this.kjEstimateSize(),\n overscan: this.kjOverscan(),\n scrollToFn: elementScroll,\n observeElementOffset,\n observeElementRect,\n onChange: () => this.sync(),\n });\n this.virtualizer = v;\n const teardown = v._didMount();\n this.destroyRef.onDestroy(() => {\n teardown();\n this.virtualizer = null;\n });\n this.sync();\n }\n\n /**\n * Walk the ancestor chain looking for the first element whose computed\n * `overflow-y` is `auto` or `scroll`. Returns `null` if none found (the\n * caller falls back to the host element).\n */\n private findScrollAncestor(): HTMLElement | null {\n let el: HTMLElement | null = this.host.parentElement;\n while (el && el !== document.body) {\n const style = getComputedStyle(el);\n const oy = style.overflowY;\n if (oy === 'auto' || oy === 'scroll') return el;\n el = el.parentElement;\n }\n return null;\n }\n\n private sync(): void {\n const v = this.virtualizer;\n if (!v) return;\n v._willUpdate();\n const items = v.getVirtualItems();\n const total = v.getTotalSize();\n this._virtualRows.set(items);\n this._totalSize.set(total);\n if (items.length === 0) {\n this._paddingTop.set(0);\n this._paddingBottom.set(0);\n return;\n }\n const first = items[0]!;\n const last = items[items.length - 1]!;\n this._paddingTop.set(first.start);\n this._paddingBottom.set(Math.max(0, total - (last.start + last.size)));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { KjInputComponent } from '../../input/input';\nimport { KJ_EDITOR_CONTRACT, type KjEditorContract } from './index';\n\n/**\n * Inline text cell editor for `<kj-table>`. Renders the styled\n * `<kj-input>` component (which wraps the headless `kjInput` directive and\n * applies theme tokens) so cell editors stay consistent with the rest of\n * the design system.\n *\n * Commits on Enter or blur. Cancels on Escape.\n */\n@Component({\n selector: 'kj-text-editor',\n standalone: true,\n imports: [KjInputComponent],\n template: `\n <kj-input\n class=\"kj-editor kj-editor--text\"\n [value]=\"draft()\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"commit()\"\n (keydown.escape)=\"cancel(); $event.stopPropagation()\"\n (focusout)=\"onFocusOut($event)\"\n />\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTextEditor {\n private readonly ctx = inject(KJ_EDITOR_CONTRACT) as KjEditorContract<string>;\n private readonly hostEl: ElementRef<HTMLElement> = inject(ElementRef);\n private settled = false;\n private mounted = false;\n\n /** Template-bound `<kj-input>` instance — exposes a public `focus()`. */\n private readonly inputCmp = viewChild(KjInputComponent);\n\n protected readonly draft = signal<string>('');\n\n constructor() {\n this.draft.set(this.ctx.value ?? '');\n afterNextRender(() => {\n this.inputCmp()?.focus();\n this.mounted = true;\n });\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n if (target) this.draft.set(target.value);\n }\n\n protected commit(): void {\n if (this.settled) return;\n this.settled = true;\n this.ctx.commit(this.draft());\n }\n\n protected cancel(): void {\n if (this.settled) return;\n this.settled = true;\n this.ctx.cancel();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n if (!this.mounted || this.settled) return;\n const next = event.relatedTarget as Node | null;\n if (next && this.hostEl.nativeElement.contains(next)) return;\n this.commit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { KjNumberInputComponent } from '../../number-input/number-input';\nimport { KJ_EDITOR_CONTRACT, type KjEditorContract } from './index';\n\n/**\n * Inline numeric cell editor for `<kj-table>`. Renders the styled\n * `<kj-number-input>` component (which wraps the headless number-input\n * directive family) so cell editors stay consistent with the rest of the\n * design system.\n *\n * Commits on Enter or blur. Cancels on Escape. Non-finite drafts (e.g. an\n * empty field) round-trip through `cancel()` rather than committing `NaN`.\n */\n@Component({\n selector: 'kj-number-editor',\n standalone: true,\n imports: [KjNumberInputComponent],\n template: `\n <kj-number-input\n class=\"kj-editor kj-editor--number\"\n [(kjValue)]=\"draft\"\n (keydown.enter)=\"commit()\"\n (keydown.escape)=\"cancel(); $event.stopPropagation()\"\n (focusout)=\"onFocusOut($event)\"\n />\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjNumberEditor {\n private readonly ctx = inject(KJ_EDITOR_CONTRACT) as KjEditorContract<number>;\n private readonly hostEl: ElementRef<HTMLElement> = inject(ElementRef);\n private settled = false;\n private mounted = false;\n\n /** Template-bound `<kj-number-input>` — exposes a public `focus()`. */\n private readonly numberInput = viewChild(KjNumberInputComponent);\n\n protected readonly draft = signal<number>(0);\n\n constructor() {\n const v = this.ctx.value;\n this.draft.set(typeof v === 'number' && Number.isFinite(v) ? v : 0);\n afterNextRender(() => {\n this.numberInput()?.focus();\n this.mounted = true;\n });\n }\n\n protected commit(): void {\n if (this.settled) return;\n const value = this.draft();\n this.settled = true;\n if (Number.isFinite(value)) {\n this.ctx.commit(value);\n } else {\n this.ctx.cancel();\n }\n }\n\n protected cancel(): void {\n if (this.settled) return;\n this.settled = true;\n this.ctx.cancel();\n }\n\n /**\n * Commit on blur — but only when focus leaves the entire editor host\n * (i.e. not when focus moves between the inner input and a stepper\n * button). Without this guard, clicking a +/- stepper would fire blur\n * and prematurely commit before the value updates.\n */\n protected onFocusOut(event: FocusEvent): void {\n if (!this.mounted || this.settled) return;\n const next = event.relatedTarget as Node | null;\n if (next && this.hostEl.nativeElement.contains(next)) return;\n this.commit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\nimport { KjDatePickerComponent } from '../../date-picker/date-picker';\nimport { KJ_EDITOR_CONTRACT, type KjEditorContract } from './index';\n\n/**\n * Inline date cell editor for `<kj-table>`. Renders the styled\n * `<kj-date-picker>` component (a typed input plus a popover calendar)\n * so cell editors stay consistent with the rest of the design system.\n *\n * The contract uses real `Date | null`. We bind to a draft signal that\n * mirrors the picker's `kjValue` model. Commits on Enter; cancels on\n * Escape. Blur is intentionally NOT wired here — the styled picker's\n * trigger directive emits `focusout` events during mount (the calendar\n * popover and the calendar input swap focus internally) so a blur\n * listener would fire prematurely. The host (table cell) can use\n * the contract's external lifecycle to handle commit-on-cell-blur.\n */\n@Component({\n selector: 'kj-date-editor',\n standalone: true,\n imports: [KjDatePickerComponent],\n template: `\n <kj-date-picker\n class=\"kj-editor kj-editor--date\"\n kjLocale=\"sv-SE\"\n [(kjValue)]=\"draft\"\n (keydown)=\"onKeydown($event)\"\n />\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjDateEditor {\n private readonly ctx = inject(KJ_EDITOR_CONTRACT) as KjEditorContract<Date | null>;\n private readonly hostEl: ElementRef<HTMLElement> = inject(ElementRef);\n private settled = false;\n\n protected readonly draft = signal<Date | null>(null);\n\n constructor() {\n const v = this.ctx.value;\n this.draft.set(v instanceof Date && !Number.isNaN(v.getTime()) ? v : null);\n afterNextRender(() => {\n const input = this.hostEl.nativeElement.querySelector<HTMLInputElement>('input');\n input?.focus();\n });\n }\n\n protected commit(): void {\n if (this.settled) return;\n // Parse the input's typed text directly — at the moment Enter fires the\n // styled date-picker has already pushed the parsed Date into its kjValue\n // model via the trigger directive, but signal-propagation timing across\n // the two-way binding chain (root context -> wrapper -> draft) is not\n // guaranteed to be flushed before our handler runs. Reading the input\n // element gives us a deterministic source of truth.\n const input = this.hostEl.nativeElement.querySelector<HTMLInputElement>('input');\n const raw = (input?.value ?? '').trim();\n if (raw === '') {\n this.settled = true;\n this.ctx.commit(null);\n return;\n }\n const parsed = parseIsoLike(raw) ?? this.draft();\n if (!parsed || Number.isNaN(parsed.getTime())) {\n this.settled = true;\n this.ctx.cancel();\n return;\n }\n this.settled = true;\n this.ctx.commit(parsed);\n }\n\n protected cancel(): void {\n if (this.settled) return;\n this.settled = true;\n this.ctx.cancel();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n this.commit();\n } else if (event.key === 'Escape') {\n event.stopPropagation();\n this.cancel();\n }\n }\n}\n\n/**\n * Parse the most common date shapes (ISO `YYYY-MM-DD`, also Swedish/locale\n * forms that share that order). Falls back to `new Date(raw)` for ISO-with-\n * time variants. Returns `null` for anything unparseable.\n */\nfunction parseIsoLike(raw: string): Date | null {\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(raw);\n if (iso) {\n const y = Number(iso[1]);\n const m = Number(iso[2]) - 1;\n const d = Number(iso[3]);\n const out = new Date(y, m, d);\n if (out.getFullYear() === y && out.getMonth() === m && out.getDate() === d) return out;\n return null;\n }\n const fallback = new Date(raw);\n return Number.isNaN(fallback.getTime()) ? null : fallback;\n}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { KjOptionComponent, KjSelectComponent } from '../../select/select';\nimport { KJ_EDITOR_CONTRACT, type KjEditorContract } from './index';\n\n/** Option entry accepted by `<kj-select-editor>`. */\nexport type KjSelectEditorOption = string | { value: unknown; label: string };\n\ninterface ResolvedOption {\n readonly value: unknown;\n readonly label: string;\n}\n\n/**\n * Inline select cell editor for `<kj-table>`. Renders the styled\n * `<kj-select>` component (trigger button + portalled listbox panel) so\n * cell editors stay consistent with the rest of the design system.\n *\n * Accepts options as `string[]` or `{ value, label }[]` — strings are\n * mapped to `{ value: s, label: s }`. The styled select closes its\n * panel on activation; the editor commits the selected value at that\n * point. Escape cancels.\n */\n@Component({\n selector: 'kj-select-editor',\n standalone: true,\n imports: [KjSelectComponent, KjOptionComponent],\n template: `\n <kj-select\n class=\"kj-editor kj-editor--select\"\n [value]=\"draftValue()\"\n (valueChange)=\"onValueChange($event)\"\n (keydown.escape)=\"cancel(); $event.stopPropagation()\"\n >\n @for (opt of resolved(); track opt.label) {\n <kj-option [value]=\"opt.value\">{{ opt.label }}</kj-option>\n }\n </kj-select>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjSelectEditor {\n private readonly ctx = inject(KJ_EDITOR_CONTRACT) as KjEditorContract<unknown>;\n\n /**\n * Template-bound reference to the inner `<kj-select>`. Exposes the\n * trigger via its public `focus()` API — no DOM querying needed.\n */\n private readonly select = viewChild(KjSelectComponent);\n\n /** Direct option list. Optional — when omitted, options are pulled\n * from `contract.meta?.options` so the cell-editor-outlet can forward\n * the column's `kjSelectOptions` without binding inputs imperatively. */\n readonly kjOptions = input<ReadonlyArray<KjSelectEditorOption>>([]);\n\n protected readonly resolved = computed<ResolvedOption[]>(() => {\n const direct = this.kjOptions();\n const fromMeta = this.ctx.meta?.['options'] as ReadonlyArray<KjSelectEditorOption> | undefined;\n const source = direct.length > 0 ? direct : (fromMeta ?? []);\n return source.map(opt =>\n typeof opt === 'string'\n ? { value: opt, label: opt }\n : { value: opt.value, label: opt.label },\n );\n });\n\n protected readonly draftValue = signal<unknown>(undefined);\n\n private focused = false;\n\n constructor() {\n this.draftValue.set(this.ctx.value);\n // Two reactive hops: first the editor's viewChild resolves to the\n // `<kj-select>` instance, then that instance's own `triggerEl`\n // signal resolves to the trigger button's ElementRef. `effect` tracks\n // both. We focus once — `focused` prevents stealing focus back if\n // the user later clicks away and the signal re-emits.\n effect(() => {\n const sel = this.select();\n const trigger = sel?.triggerEl();\n if (!trigger || this.focused) return;\n this.focused = true;\n (trigger as ElementRef<HTMLElement>).nativeElement.focus();\n });\n }\n\n protected onValueChange(next: unknown): void {\n this.draftValue.set(next);\n this.ctx.commit(next);\n }\n\n protected cancel(): void {\n this.ctx.cancel();\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input } from '@angular/core';\nimport { KjToggle } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjToggle` directive.\n *\n * The host `<kj-toggle>` is `display: contents`. Internally renders a real\n * `<button>` with the `kjToggle` directive applied. Two-way bind via\n * `[(pressed)]`; the wrapper exposes the same press model.\n *\n * @doc-example Default\n * The default playground — an unpressed toggle with an icon-only label.\n * @doc-file toggle.default.example.ts\n * @doc-example Usage\n * A walkthrough of the most common toggle usages — two-way `[(pressed)]`,\n * disabled, with a text label, and the switch appearance.\n * @doc-file toggle.usage.example.ts\n * @doc-example Checked\n * Pre-pressed state via `[pressed]=\"true\"` — flips `aria-pressed`.\n * @doc-file toggle.checked.example.ts\n * @doc-example Disabled\n * `[disabled]=\"true\"` removes the toggle from the tab order.\n * @doc-file toggle.disabled.example.ts\n * @doc-example With label\n * Project a text label next to the toggle for non-icon contexts.\n * @doc-file toggle.with-label.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Flips the pressed state and fires `(pressedChange)`\n * Tab — Moves focus to the next focusable element\n *\n * @doc-aria\n * role=\"switch\" — applied by the headless `KjToggle` directive\n * aria-pressed — reflects the two-way `[(pressed)]` model\n * aria-disabled — reflected when `[disabled]=\"true\"`\n * aria-label — required for icon-only toggles (dev-mode enforces it)\n * data-size — Mirrors the resolved size for theme hooks\n * data-appearance — Mirrors `'press'` vs `'switch'` for CSS hooks\n *\n * @doc-touch\n * `md` (default) and `lg` meet WCAG 2.5.5 (≥ 44×44). `sm` density retains\n * the floor via padding — only horizontal padding shrinks.\n *\n * @doc-a11y\n * Renders a real `<button role=\"switch\">` so AT announces the pressed\n * state and the native focus ring lights up on `:focus-visible`. The\n * switch appearance is purely visual — the same `role=\"switch\"` semantics\n * apply, so consumers can swap chrome without re-wiring AT.\n *\n * @doc-related checkbox,button,radio\n *\n * @doc-css-var\n * --kj-toggle-bg — Unpressed background fill.\n * --kj-toggle-bg-pressed — Pressed-state background fill. Defaults to --kj-bg-primary.\n * --kj-toggle-fg — Unpressed foreground (label/icon) color.\n * --kj-toggle-fg-pressed — Pressed-state foreground color.\n * --kj-toggle-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-toggle-padding-x — Horizontal padding. Sizes override.\n * --kj-toggle-padding-y — Vertical padding. Sizes override.\n * --kj-toggle-font-size — Font size. Sizes (sm/md/lg) override.\n * --kj-switch-w — Switch-appearance track width. Default 44px.\n * --kj-switch-h — Switch-appearance track height. Default 24px.\n * --kj-switch-thumb — Switch-appearance thumb diameter. Default 18px.\n * --kj-switch-pad — Inner padding between thumb and track. Default 2px.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name toggle\n * @doc-description Themed press/unpress toggle button for binary on/off controls.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-toggle',\n standalone: true,\n imports: [KjToggle],\n template: `\n <button\n type=\"button\"\n kjToggle\n class=\"kj-toggle\"\n [class.kj-toggle--switch]=\"appearance() === 'switch'\"\n [(kjPressed)]=\"pressed\"\n [kjDisabled]=\"disabled()\"\n [attr.data-size]=\"size()\"\n [attr.data-appearance]=\"appearance()\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n @if (appearance() === 'switch') {\n <span class=\"kj-toggle__track\" aria-hidden=\"true\">\n <span class=\"kj-toggle__thumb\"></span>\n </span>\n }\n <ng-content />\n </button>\n `,\n styleUrl: './toggle.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjToggleComponent {\n readonly pressed = model<boolean>(false);\n readonly disabled = input(false);\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly ariaLabel = input<string | undefined>(undefined);\n /**\n * `'press'` (default) renders the toggle as a press/unpress button — the\n * classic kj-toggle look. `'switch'` renders a track+thumb sliding switch\n * matching `app.css .toggle` from the design source. Both keep\n * `role=\"switch\"` + `aria-pressed` semantics from `kjToggle`.\n */\n readonly appearance = input<'press' | 'switch'>('press');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\nimport { KjToggleComponent } from '../../toggle/toggle';\nimport { KJ_EDITOR_CONTRACT, type KjEditorContract } from './index';\n\n/**\n * Inline boolean cell editor for `<kj-table>`. Renders the styled\n * `<kj-toggle>` component (a real `<button role=\"switch\">` with theme\n * tokens) so cell editors stay consistent with the rest of the design\n * system.\n *\n * Each toggle commits the new draft immediately. Escape cancels.\n */\n@Component({\n selector: 'kj-boolean-editor',\n standalone: true,\n imports: [KjToggleComponent],\n template: `\n <kj-toggle\n class=\"kj-editor kj-editor--boolean\"\n appearance=\"switch\"\n [(pressed)]=\"draft\"\n (click)=\"ctx.commit(draft())\"\n (keydown.enter)=\"toggleAndCommit(); $event.preventDefault()\"\n (keydown.space)=\"toggleAndCommit(); $event.preventDefault()\"\n (keydown.escape)=\"cancel(); $event.stopPropagation()\"\n >\n {{ draft() ? 'On' : 'Off' }}\n </kj-toggle>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBooleanEditor {\n protected readonly ctx = inject(KJ_EDITOR_CONTRACT) as KjEditorContract<boolean>;\n private readonly hostEl: ElementRef<HTMLElement> = inject(ElementRef);\n\n protected readonly draft = signal<boolean>(false);\n\n constructor() {\n this.draft.set(!!this.ctx.value);\n afterNextRender(() => {\n const btn = this.hostEl.nativeElement.querySelector<HTMLButtonElement>('button');\n btn?.focus();\n });\n }\n\n protected cancel(): void {\n this.ctx.cancel();\n }\n\n /**\n * Flip the draft and commit. The `[(pressed)]` two-way binding into the\n * kj-toggle handles updating its visual state — and the toggle's own\n * `pressedChange` will also fire commit, but `ctx.commit` is idempotent\n * from the host's perspective so a single user action -> single commit.\n */\n protected toggleAndCommit(): void {\n const next = !this.draft();\n this.draft.set(next);\n this.ctx.commit(next);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Contract handed to a cell editor when the user enters edit mode.\n *\n * The host (a table cell) wires up:\n * - `value` — the current cell value to seed the editor with;\n * - `commit(next)` — called when the editor wants to persist the new value\n * (Enter, blur for text-like editors, or change for select/boolean);\n * - `cancel()` — called when the user aborts editing (Escape).\n *\n * Editors should not assume anything about how the host applies the commit —\n * they just call `commit(next)` with the resolved value.\n */\nexport interface KjEditorContract<TValue> {\n /** Initial value shown when the editor mounts. */\n value: TValue;\n /** Persist the new value. */\n commit: (next: TValue) => void;\n /** Discard the in-progress edit. */\n cancel: () => void;\n /** Column meta forwarded to the editor — e.g. select options, min/max\n * for number editors, custom params. Editors read what they need and\n * ignore the rest. */\n meta?: Record<string, unknown>;\n}\n\n/**\n * DI token for the {@link KjEditorContract}. The table cell that mounts an\n * editor provides this token; each editor injects it and reacts to its\n * `value` / `commit` / `cancel` hooks.\n */\nexport const KJ_EDITOR_CONTRACT = new InjectionToken<KjEditorContract<unknown>>(\n 'kj.editor.contract',\n);\n\nexport * from './text-editor';\nexport * from './number-editor';\nexport * from './date-editor';\nexport * from './select-editor';\nexport * from './boolean-editor';\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n InjectionToken,\n ViewEncapsulation,\n computed,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs/operators';\nimport type { Column, Table } from '@tanstack/angular-table';\nimport { KjVisuallyHidden, type KjTextFilterModel } from '@kouji-ui/core';\nimport { KjInputComponent } from '../../input/input';\n\n/**\n * Context passed to every built-in filter UI. Resolves the TanStack\n * `Column` whose filter value the input writes, and the parent `Table`\n * for cross-column wiring (e.g. faceted unique values).\n */\nexport interface KjFilterContext<TData = unknown> {\n readonly column: Column<TData, unknown>;\n readonly table: Table<TData>;\n}\n\n/** DI token used to inject the `KjFilterContext` into filter components. */\nexport const KJ_FILTER_CONTEXT = new InjectionToken<KjFilterContext>(\n 'kj.filter.context',\n);\n\n/** Default debounce window for the text filter, in milliseconds. */\nconst DEFAULT_DEBOUNCE_MS = 300;\n\n/**\n * Text filter UI. Renders a styled `<kj-input>` that writes the typed\n * string to `column.setFilterValue(...)` after a 300ms debounce so\n * keystrokes don't flood the table's filter model.\n *\n * Initial render seeds from `column.getFilterValue()` so the input\n * round-trips when the filter is restored from URL/state.\n *\n * The input is labelled via a wrapping `<label>` carrying a visually\n * hidden caption (`Filter by <header>`) so screen readers announce the\n * column the filter targets.\n *\n * @example\n * ```html\n * <kj-text-filter /> <!-- KJ_FILTER_CONTEXT must be provided in the host -->\n * ```\n */\n@Component({\n selector: 'kj-text-filter',\n standalone: true,\n imports: [ReactiveFormsModule, KjInputComponent, KjVisuallyHidden],\n styleUrl: './filters.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-text-filter',\n },\n template: `\n <div class=\"kj-text-filter__label\">\n <span kjVisuallyHidden>{{ ariaLabel() }}</span>\n <kj-input\n class=\"kj-text-filter__input\"\n type=\"search\"\n kjSize=\"xs\"\n [formControl]=\"control\"\n />\n </div>\n `,\n})\nexport class KjTextFilter<TData = unknown> {\n private readonly ctx = inject<KjFilterContext<TData>>(KJ_FILTER_CONTEXT);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Reactive form control driving the styled `<kj-input>`. */\n protected readonly control = new FormControl<string>(\n (() => {\n const v = this.ctx.column.getFilterValue();\n if (typeof v === 'string') return v;\n if (v && typeof v === 'object' && (v as { filterType?: string }).filterType === 'text') {\n return (v as KjTextFilterModel).filter ?? '';\n }\n return '';\n })(),\n { nonNullable: true },\n );\n\n /** Accessible label derived from the column header. */\n protected readonly ariaLabel = computed(() => {\n const header = this.ctx.column.columnDef.header;\n const label = typeof header === 'string' ? header : this.ctx.column.id;\n return `Filter by ${label}`;\n });\n\n constructor() {\n this.control.valueChanges\n .pipe(debounceTime(DEFAULT_DEBOUNCE_MS), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n if (value === '') {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n const model: KjTextFilterModel = { filterType: 'text', type: 'contains', filter: value };\n this.ctx.column.setFilterValue(model);\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport type { Column } from '@tanstack/angular-table';\nimport type { KjNumberFilterModel, KjNumberFilterType } from '@kouji-ui/core';\nimport { KjNumberInputComponent } from '../../number-input/number-input';\nimport { KjOptionComponent, KjSelectComponent } from '../../select/select';\nimport { KJ_FILTER_CONTEXT, type KjFilterContext } from './text-filter';\n\n/** Legacy tuple shape — kept exported because external consumers still pass\n * `[min, max]` into `column.setFilterValue` for `inRange`-style filters. */\nexport type KjNumberRange = [min: number | undefined, max: number | undefined];\n\ninterface OperatorDescriptor {\n readonly value: KjNumberFilterType;\n readonly label: string;\n /** How many number inputs to render after the operator picker. */\n readonly inputs: 0 | 1 | 2;\n}\n\n/** Operators offered by the number filter, in display order. */\nconst OPERATORS: readonly OperatorDescriptor[] = [\n { value: 'equals', label: '=', inputs: 1 },\n { value: 'notEquals', label: '≠', inputs: 1 },\n { value: 'greaterThan', label: '>', inputs: 1 },\n { value: 'greaterThanOrEqual', label: '≥', inputs: 1 },\n { value: 'lessThan', label: '<', inputs: 1 },\n { value: 'lessThanOrEqual', label: '≤', inputs: 1 },\n { value: 'inRange', label: 'Between', inputs: 2 },\n { value: 'blank', label: 'Is blank', inputs: 0 },\n { value: 'notBlank', label: 'Not blank', inputs: 0 },\n];\n\nconst OP_BY_VALUE: ReadonlyMap<KjNumberFilterType, OperatorDescriptor> = new Map(\n OPERATORS.map(o => [o.value, o] as const),\n);\n\n/**\n * Number filter UI: an operator picker followed by one or two compact number\n * inputs (zero for `blank` / `notBlank`). Writes a structured\n * {@link KjNumberFilterModel} to `column.setFilterValue(...)` so the filter\n * round-trips through `gridApi.filter.getModel()` for SSR backends.\n *\n * Backwards-compatibility: an `[min, max]` tuple persisted by the previous\n * iteration is read on init and surfaced as `inRange`, so users who saved a\n * table state under the old shape don't lose their filter.\n *\n * @doc-keyboard\n * Tab — Moves focus between the operator picker and the inputs\n * Enter — Commits the typed value (native number input semantics)\n * ArrowUp/Down — Increment / decrement the focused input by 1\n */\n@Component({\n selector: 'kj-number-filter',\n standalone: true,\n imports: [KjNumberInputComponent, KjSelectComponent, KjOptionComponent],\n styleUrl: './filters.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-number-filter',\n },\n template: `\n <kj-select\n class=\"kj-number-filter__operator\"\n kjSize=\"xs\"\n [value]=\"operator()\"\n (valueChange)=\"onOperatorChange($event)\"\n [attr.aria-label]=\"operatorAriaLabel()\"\n >\n @for (op of operators; track op.value) {\n <kj-option [value]=\"op.value\" [kjLabel]=\"op.label\">{{ op.label }}</kj-option>\n }\n </kj-select>\n\n @if (inputsForOperator() >= 1) {\n <kj-number-input\n class=\"kj-number-filter__input kj-number-filter__input--primary\"\n kjSize=\"xs\"\n [kjAriaLabel]=\"primaryAriaLabel()\"\n [kjValue]=\"$any(primary())\"\n (kjValueChange)=\"onPrimaryChange($event)\"\n />\n }\n @if (inputsForOperator() === 2) {\n <kj-number-input\n class=\"kj-number-filter__input kj-number-filter__input--secondary\"\n kjSize=\"xs\"\n [kjAriaLabel]=\"secondaryAriaLabel()\"\n [kjValue]=\"$any(secondary())\"\n (kjValueChange)=\"onSecondaryChange($event)\"\n />\n }\n `,\n})\nexport class KjNumberFilter<TData = unknown> {\n private readonly ctx = inject<KjFilterContext<TData>>(KJ_FILTER_CONTEXT);\n\n /** @internal — exposed for template iteration. */\n protected readonly operators = OPERATORS;\n\n protected readonly operator = signal<KjNumberFilterType>('equals');\n protected readonly primary = signal<number | undefined>(undefined);\n protected readonly secondary = signal<number | undefined>(undefined);\n\n protected readonly inputsForOperator = computed(\n () => OP_BY_VALUE.get(this.operator())?.inputs ?? 1,\n );\n\n private readonly columnLabel = computed(() => headerLabel(this.ctx.column));\n protected readonly operatorAriaLabel = computed(\n () => `${this.columnLabel()} filter operator`,\n );\n protected readonly primaryAriaLabel = computed(() => {\n const op = OP_BY_VALUE.get(this.operator());\n return op?.inputs === 2\n ? `Filter ${this.columnLabel()} minimum`\n : `Filter ${this.columnLabel()} value`;\n });\n protected readonly secondaryAriaLabel = computed(\n () => `Filter ${this.columnLabel()} maximum`,\n );\n\n constructor() {\n // Seed from any pre-existing filter value, honouring three shapes:\n // - new structured `KjNumberFilterModel`\n // - legacy `[min, max]` tuple (still emitted by URL state from older clients)\n // - empty / null / undefined → defaults\n const v = this.ctx.column.getFilterValue();\n if (Array.isArray(v)) {\n const [min, max] = v as KjNumberRange;\n // [n, undefined] → equals; [undefined, n] → equals on n; [a, b] → inRange.\n if (min !== undefined && max !== undefined) {\n this.operator.set('inRange');\n this.primary.set(min);\n this.secondary.set(max);\n } else if (min !== undefined) {\n this.operator.set('greaterThanOrEqual');\n this.primary.set(min);\n } else if (max !== undefined) {\n this.operator.set('lessThanOrEqual');\n this.primary.set(max);\n }\n } else if (v && typeof v === 'object'\n && (v as { filterType?: string }).filterType === 'number') {\n const m = v as KjNumberFilterModel;\n this.operator.set(m.type);\n this.primary.set(m.filter);\n this.secondary.set(m.filterTo);\n }\n }\n\n protected onOperatorChange(next: unknown): void {\n const op = (typeof next === 'string' ? next : String(next ?? '')) as KjNumberFilterType;\n if (!OP_BY_VALUE.has(op)) return;\n const descriptor = OP_BY_VALUE.get(op)!;\n this.operator.set(op);\n // Drop the secondary input when we're no longer in a 2-input operator;\n // drop both when switching to `blank` / `notBlank`. This keeps the model\n // shape consistent with `descriptor.inputs`.\n if (descriptor.inputs === 0) {\n this.primary.set(undefined);\n this.secondary.set(undefined);\n } else if (descriptor.inputs === 1) {\n this.secondary.set(undefined);\n }\n this.commit();\n }\n\n protected onPrimaryChange(value: number | null): void {\n this.primary.set(normalise(value));\n this.commit();\n }\n\n protected onSecondaryChange(value: number | null): void {\n this.secondary.set(normalise(value));\n this.commit();\n }\n\n private commit(): void {\n const type = this.operator();\n const descriptor = OP_BY_VALUE.get(type);\n if (!descriptor) {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n if (descriptor.inputs === 0) {\n const model: KjNumberFilterModel = { filterType: 'number', type };\n this.ctx.column.setFilterValue(model);\n return;\n }\n const primary = this.primary();\n // 1- or 2-input operator with no primary set is a no-op (cleared state).\n if (primary === undefined && descriptor.inputs >= 1) {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n if (descriptor.inputs === 1) {\n const model: KjNumberFilterModel = { filterType: 'number', type, filter: primary };\n this.ctx.column.setFilterValue(model);\n return;\n }\n // inRange (2 inputs): keep the filter active even when only one side is\n // typed — TanStack's matcher reads the open side as ±∞.\n const secondary = this.secondary();\n if (primary === undefined && secondary === undefined) {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n const model: KjNumberFilterModel = {\n filterType: 'number',\n type,\n filter: primary,\n filterTo: secondary,\n };\n this.ctx.column.setFilterValue(model);\n }\n}\n\nfunction normalise(value: number | null | undefined): number | undefined {\n return value != null && Number.isFinite(value) ? value : undefined;\n}\n\nfunction headerLabel<TData>(column: Column<TData, unknown>): string {\n const header = column.columnDef.header;\n return typeof header === 'string' ? header : column.id;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n} from '@angular/core';\nimport type { Column } from '@tanstack/angular-table';\nimport { KjVisuallyHidden, type KjDateFilterModel } from '@kouji-ui/core';\nimport { KjDatePickerComponent } from '../../date-picker/date-picker';\nimport { KJ_FILTER_CONTEXT, type KjFilterContext } from './text-filter';\n\n/** Filter value shape — ISO date strings (`YYYY-MM-DD`) or `undefined` per bound. */\nexport type KjDateRange = [from: string | undefined, to: string | undefined];\n\n/**\n * Date-range filter UI. Renders two styled `<kj-date-picker>` controls\n * (from / to) and writes a `[from, to]` tuple of ISO date strings to\n * `column.setFilterValue`. Either bound may be blank to leave it open.\n *\n * The wire format stays string-based (`YYYY-MM-DD`) so it serialises\n * cleanly into URL state and round-trips without timezone surprises —\n * conversion to / from `Date` is local to the picker boundary.\n *\n * Each picker is wrapped in a `<label>` carrying visually-hidden text so\n * screen readers announce which bound the picker controls.\n */\n@Component({\n selector: 'kj-date-filter',\n standalone: true,\n imports: [KjDatePickerComponent, KjVisuallyHidden],\n styleUrl: './filters.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-date-filter',\n },\n template: `\n <div class=\"kj-date-filter__label kj-date-filter__label--from\">\n <span kjVisuallyHidden class=\"kj-date-filter__caption\">{{ fromAriaLabel() }}</span>\n <kj-date-picker\n class=\"kj-date-filter__input kj-date-filter__input--from\"\n kjSize=\"xs\"\n [kjValue]=\"fromDate()\"\n (kjValueChange)=\"onFromChange($event)\"\n />\n </div>\n <div class=\"kj-date-filter__label kj-date-filter__label--to\">\n <span kjVisuallyHidden class=\"kj-date-filter__caption\">{{ toAriaLabel() }}</span>\n <kj-date-picker\n class=\"kj-date-filter__input kj-date-filter__input--to\"\n kjSize=\"xs\"\n [kjValue]=\"toDate()\"\n (kjValueChange)=\"onToChange($event)\"\n />\n </div>\n `,\n})\nexport class KjDateFilter<TData = unknown> {\n private readonly ctx = inject<KjFilterContext<TData>>(KJ_FILTER_CONTEXT);\n\n private current: KjDateRange = (() => {\n const v = this.ctx.column.getFilterValue();\n if (Array.isArray(v)) return v as KjDateRange;\n if (v && typeof v === 'object' && (v as { filterType?: string }).filterType === 'date') {\n const m = v as KjDateFilterModel;\n return [m.dateFrom, m.dateTo];\n }\n return [undefined, undefined];\n })();\n\n protected readonly fromDate = computed(() => isoToDate(this.current[0]));\n protected readonly toDate = computed(() => isoToDate(this.current[1]));\n\n protected readonly fromAriaLabel = computed(\n () => `Filter by ${headerLabel(this.ctx.column)} from date`,\n );\n protected readonly toAriaLabel = computed(\n () => `Filter by ${headerLabel(this.ctx.column)} to date`,\n );\n\n protected onFromChange(date: Date | null): void {\n this.current = [dateToIso(date), this.current[1]];\n this.commit();\n }\n\n protected onToChange(date: Date | null): void {\n this.current = [this.current[0], dateToIso(date)];\n this.commit();\n }\n\n private commit(): void {\n const [from, to] = this.current;\n if (from === undefined && to === undefined) {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n const model: KjDateFilterModel = { filterType: 'date', type: 'inRange', dateFrom: from, dateTo: to };\n this.ctx.column.setFilterValue(model);\n }\n}\n\nfunction isoToDate(iso: string | undefined): Date | null {\n if (!iso) return null;\n // Parse as local-time midnight so the date round-trips without TZ drift.\n const [y, m, d] = iso.split('-').map(Number);\n if (!y || !m || !d) return null;\n return new Date(y, m - 1, d);\n}\n\nfunction dateToIso(date: Date | null | undefined): string | undefined {\n if (!date) return undefined;\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\nfunction headerLabel<TData>(column: Column<TData, unknown>): string {\n const header = column.columnDef.header;\n return typeof header === 'string' ? header : column.id;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport type { Column } from '@tanstack/angular-table';\nimport { KjVisuallyHidden, type KjColumnMeta, type KjSetFilterModel } from '@kouji-ui/core';\nimport { KjOptionComponent, KjSelectComponent } from '../../select/select';\nimport { KJ_FILTER_CONTEXT, type KjFilterContext } from './text-filter';\n\n/** Option descriptor for the select filter dropdown. */\nexport interface KjSelectFilterOption {\n readonly label: string;\n readonly value: unknown;\n}\n\n/** Sentinel value used by the \"All\" option to clear the column filter. */\nconst ALL_VALUE = '__kj_filter_all__';\n\n/**\n * Select-filter UI. Renders a styled `<kj-select>` bound to the column's\n * filter value. Choosing the leading \"All\" entry clears the filter\n * (`setFilterValue(undefined)`); any other choice writes the option's\n * `value` verbatim.\n *\n * The dropdown is wrapped in a `<label>` carrying visually-hidden caption\n * text so screen readers announce the filtered column.\n */\n@Component({\n selector: 'kj-select-filter',\n standalone: true,\n imports: [KjSelectComponent, KjOptionComponent, KjVisuallyHidden],\n styleUrl: './filters.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-select-filter',\n },\n template: `\n <div class=\"kj-select-filter__label\">\n <span kjVisuallyHidden>{{ ariaLabel() }}</span>\n <kj-select\n class=\"kj-select-filter__control\"\n kjSize=\"xs\"\n [value]=\"currentValueKey()\"\n (valueChange)=\"onChange($event)\"\n >\n <kj-option [value]=\"allKey\" [kjLabel]=\"allLabel()\">{{ allLabel() }}</kj-option>\n @for (opt of resolvedOptions(); track $index) {\n <kj-option [value]=\"keyOf($index)\" [kjLabel]=\"opt.label\">{{ opt.label }}</kj-option>\n }\n </kj-select>\n </div>\n `,\n})\nexport class KjSelectFilter<TData = unknown> {\n private readonly ctx = inject<KjFilterContext<TData>>(KJ_FILTER_CONTEXT);\n\n /** Options shown in the dropdown. Optional — if omitted, the filter\n * derives entries from the column's `meta.kj.selectOptions` so consumers\n * don't need to wire two places. The leading \"All\" entry is rendered\n * automatically either way. */\n readonly options = input<readonly KjSelectFilterOption[] | null>(null);\n /** Label for the \"clear filter\" entry. */\n readonly allLabel = input<string>('All');\n\n /** Effective option set — `[options]` input wins over column meta2ui\n *\n . */\n protected readonly resolvedOptions = computed<readonly KjSelectFilterOption[]>(() => {\n const supplied = this.options();\n if (supplied && supplied.length > 0) return supplied;\n const meta = (this.ctx.column.columnDef.meta as { kj?: KjColumnMeta<TData> } | undefined)?.kj;\n const raw = meta?.selectOptions ?? [];\n return raw.map<KjSelectFilterOption>((o) =>\n typeof o === 'object' && o !== null && 'label' in (o as object) && 'value' in (o as object)\n ? (o as KjSelectFilterOption)\n : { label: String(o), value: o },\n );\n });\n\n /** @internal — exposed for template binding. */\n protected readonly allKey = ALL_VALUE;\n\n protected readonly ariaLabel = computed(() => `Filter by ${headerLabel(this.ctx.column)}`);\n\n /** Maps the column's current filter value back to the matching option index, or `ALL_VALUE`. */\n protected readonly currentValueKey = computed(() => {\n const current = this.ctx.column.getFilterValue();\n if (current === undefined || current === null) return ALL_VALUE;\n // Single value (legacy) OR `KjSetFilterModel` with one entry.\n const value =\n current &&\n typeof current === 'object' &&\n (current as { filterType?: string }).filterType === 'set'\n ? ((current as KjSetFilterModel).values[0] as unknown)\n : current;\n const idx = this.resolvedOptions().findIndex((o) => Object.is(o.value, value));\n return idx === -1 ? ALL_VALUE : this.keyOf(idx);\n });\n\n protected keyOf(index: number): string {\n return String(index);\n }\n\n protected onChange(value: unknown): void {\n const key = typeof value === 'string' ? value : String(value ?? '');\n if (key === ALL_VALUE || key === '') {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n const idx = Number(key);\n const opt = this.resolvedOptions()[idx];\n if (!opt) {\n this.ctx.column.setFilterValue(undefined);\n return;\n }\n const model: KjSetFilterModel = { filterType: 'set', values: [opt.value] };\n this.ctx.column.setFilterValue(model);\n }\n}\n\nfunction headerLabel<TData>(column: Column<TData, unknown>): string {\n const header = column.columnDef.header;\n return typeof header === 'string' ? header : column.id;\n}\n","import {\n DestroyRef,\n Directive,\n EnvironmentInjector,\n Injector,\n Type,\n ViewContainerRef,\n effect,\n inject,\n input,\n output,\n untracked,\n type ComponentRef,\n} from '@angular/core';\nimport { KJ_EDITOR_CONTRACT, type KjEditorContract } from './table-editors';\n\n/**\n * Structural outlet that mounts a cell editor component into its own\n * `ViewContainerRef`. Replaces the old anchor-`<span>` + `querySelectorAll`\n * sync loop: Angular's view lifecycle now owns mount and tear-down, so when\n * the host `@if` removes the directive the editor is destroyed automatically.\n *\n * Place inside the cell's edit branch:\n *\n * ```html\n * @if (isEditing(c)) {\n * <ng-container\n * kjCellEditorOutlet\n * [kjEditor]=\"editorTypeFor(c)\"\n * [kjValue]=\"c.getValue()\"\n * (commit)=\"onEditCommit(c, $event)\"\n * (cancel)=\"onEditCancel()\"\n * />\n * }\n * ```\n *\n * The directive wires `KJ_EDITOR_CONTRACT` so each editor sees the same\n * `{ value, commit, cancel }` shape it does today — no editor changes needed.\n */\n@Directive({\n selector: '[kjCellEditorOutlet]',\n standalone: true,\n})\nexport class KjCellEditorOutlet {\n /** Editor component class to mount. `null` mounts nothing. */\n readonly kjEditor = input<Type<unknown> | null>(null);\n\n /** Initial value seeded into the editor's `KJ_EDITOR_CONTRACT`. */\n readonly kjValue = input<unknown>(undefined);\n\n /** Extra column meta forwarded to the editor through the contract —\n * used to hand off things like select options without binding inputs\n * on a dynamically-created component. */\n readonly kjMeta = input<Record<string, unknown> | undefined>(undefined);\n\n /** Fired when the editor calls `contract.commit(next)`. */\n readonly commit = output<unknown>();\n\n /** Fired when the editor calls `contract.cancel()`. */\n readonly editCancel = output<void>();\n\n private readonly vcr = inject(ViewContainerRef);\n private readonly envInjector = inject(EnvironmentInjector);\n private readonly parentInjector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n private ref: ComponentRef<unknown> | null = null;\n\n constructor() {\n // Re-mount whenever the editor type changes. The initial value is\n // captured non-reactively — we don't want every keystroke in the editor\n // to re-seed it. Commit/cancel callbacks read the latest outputs at\n // emit time, so they always wire through to the live component instance.\n effect(() => {\n const editor = this.kjEditor();\n this.tearDown();\n if (!editor) return;\n\n const initialValue = untracked(() => this.kjValue());\n const meta = untracked(() => this.kjMeta());\n const contract: KjEditorContract<unknown> = {\n value: initialValue,\n commit: (next: unknown) => this.commit.emit(next),\n cancel: () => this.editCancel.emit(),\n meta,\n };\n const childInjector = Injector.create({\n providers: [{ provide: KJ_EDITOR_CONTRACT, useValue: contract }],\n parent: this.parentInjector,\n });\n this.ref = this.vcr.createComponent(editor, {\n environmentInjector: this.envInjector,\n injector: childInjector,\n });\n // Force the editor's view to materialize NOW so its child\n // components (and their constructors — KjSelectTrigger registers\n // itself with KjSelect at construction time) run synchronously.\n // Without this, an effect-based focus call could fire before the\n // trigger directive existed.\n this.ref.changeDetectorRef.detectChanges();\n });\n\n this.destroyRef.onDestroy(() => this.tearDown());\n }\n\n private tearDown(): void {\n this.ref?.destroy();\n this.ref = null;\n this.vcr.clear();\n }\n}\n","import {\n DestroyRef,\n Directive,\n EnvironmentInjector,\n Injector,\n Type,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n type ComponentRef,\n} from '@angular/core';\nimport type { Column, Table } from '@tanstack/angular-table';\nimport {\n KJ_TABLE,\n KjTable,\n provideKjFilterParams,\n type KjFilterParams,\n} from '@kouji-ui/core';\nimport { KJ_FILTER_CONTEXT, type KjFilterContext } from './table-filters/text-filter';\n\n/**\n * Cell-row outlet that mounts a built-in or user-supplied filter UI for one\n * column. Uses its own `ViewContainerRef` for mount + destroy, so when the\n * host `@if` removes the directive Angular destroys the filter automatically\n * — no DOM querying, no manual lifecycle bookkeeping.\n *\n * The mounted component receives:\n * - **`KJ_FILTER_CONTEXT`** (legacy) — for the four built-in filters.\n * - **`KJ_FILTER_PARAMS`** (modern) — used via {@link injectKjFilterParams}\n * from any user-supplied filter. Custom filters should prefer this token\n * over an `@Input() params` field — `setInput` / `inputBinding` cannot be\n * forwarded blindly here because we don't know whether the input is\n * declared, and Angular's `inputBinding` errors when the target component\n * has no matching input.\n *\n * Column-level options (e.g. `selectOptions`) are sourced directly from\n * `params.column.columnDef.meta.kj` by the filter itself, not piped through\n * this outlet — keeping the outlet free of filter-type branching.\n *\n * ```html\n * <ng-container\n * kjFilterCell\n * [kjColumn]=\"h.column\"\n * [kjFilter]=\"filterRendererFor(h.column)\"\n * />\n * ```\n */\n@Directive({\n selector: '[kjFilterCell]',\n standalone: true,\n})\nexport class KjFilterCellOutlet<TData = unknown> {\n /** Column this filter operates on. */\n readonly kjColumn = input.required<Column<TData, unknown>>();\n\n /** Component class to mount. `null` mounts nothing. */\n readonly kjFilter = input<Type<unknown> | null>(null);\n\n private readonly vcr = inject(ViewContainerRef);\n private readonly envInjector = inject(EnvironmentInjector);\n private readonly parentInjector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly tableDir = inject<KjTable<TData>>(KJ_TABLE as never);\n\n private ref: ComponentRef<unknown> | null = null;\n\n // Cache the params used to mount the current ref. The effect compares\n // these on each run and skips re-mounting when nothing meaningful changed\n // — without this guard, even an identity-stable input that happens to be\n // re-emitted (e.g. TanStack rebuilding header groups on every CD) would\n // tear the filter down and recreate it, which broke the kj-select overlay\n // because the kj-select got destroyed mid-open.\n private mountedFor: { filter: Type<unknown> | null; column: Column<TData, unknown> | null } = { filter: null, column: null };\n\n constructor() {\n effect(() => {\n const filter = this.kjFilter();\n const column = this.kjColumn();\n // Skip the re-mount when nothing meaningful changed. Without this\n // guard, the parent template re-evaluates inputs every CD pass (the\n // TanStack `Column` reference can be re-created during table init),\n // so the effect would tear the filter down and rebuild it 8–12 times\n // — destroying the kj-select mid-open and making the dropdown look\n // broken.\n if (this.ref && this.mountedFor.filter === filter && this.mountedFor.column === column) {\n return;\n }\n this.tearDown();\n if (!filter) return;\n\n const tbl: Table<TData> = this.tableDir.table();\n const ctx: KjFilterContext<TData> = { column, table: tbl };\n const modelSig = computed(() => {\n // Subscribe to the table's filter state slice so the param signal\n // updates whenever any column filter changes.\n this.tableDir.state.columnFilters();\n return (column.getFilterValue() ?? null) as unknown;\n });\n const params: KjFilterParams<TData, unknown> = {\n column,\n api: this.tableDir.gridApi,\n columnApi: this.tableDir.columnApi,\n model: modelSig,\n setModel: (v) =>\n column.setFilterValue(\n v === '' || v === null || v === undefined ? undefined : v,\n ),\n isActive: () => column.getIsFiltered(),\n clear: () => column.setFilterValue(undefined),\n };\n\n const childInjector = Injector.create({\n providers: [\n { provide: KJ_FILTER_CONTEXT, useValue: ctx },\n provideKjFilterParams(params),\n ],\n parent: this.parentInjector,\n });\n this.ref = this.vcr.createComponent(filter, {\n environmentInjector: this.envInjector,\n injector: childInjector,\n });\n this.mountedFor = { filter, column };\n });\n\n this.destroyRef.onDestroy(() => this.tearDown());\n }\n\n private tearDown(): void {\n this.ref?.destroy();\n this.ref = null;\n this.vcr.clear();\n this.mountedFor = { filter: null, column: null };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n Type,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n contentChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { ResourceRef } from '@angular/core';\nimport {\n KjTable,\n KjTableHeader,\n KjTableRow,\n KjTableCell,\n KjTableKeyboardNav,\n KjIconDirective,\n KJ_TABLE_STORAGE,\n type KjColumnMeta,\n type KjResourceResult,\n type KjStorageAdapter,\n type KjTableState,\n} from '@kouji-ui/core';\nimport type { Cell, Column, Header, Row, RowData } from '@tanstack/angular-table';\nimport { KjTableVirtual } from './table-virtual';\nimport { KjCheckboxComponent } from '../checkbox/checkbox';\nimport {\n KjBooleanEditor,\n KjDateEditor,\n KjNumberEditor,\n KjSelectEditor,\n KjTextEditor,\n} from './table-editors';\nimport {\n KjDateFilter,\n KjNumberFilter,\n KjSelectFilter,\n KjTextFilter,\n} from './table-filters';\nimport { KjCellEditorOutlet } from './table-cell-editor-outlet';\nimport { KjFilterCellOutlet } from './table-filter-outlet';\n\n/** Cell-edit payload emitted by `(cellEdit)`. */\nexport interface KjCellEditEvent<TData> {\n readonly row: TData;\n readonly columnId: string;\n readonly oldValue: unknown;\n readonly newValue: unknown;\n}\n\n/** Row click payload. */\nexport interface KjRowClickEvent<TData> {\n readonly row: TData;\n readonly event: MouseEvent;\n}\n\nconst VIRTUAL_AUTO_THRESHOLD = 200;\n\n/** Lookup of column type → built-in editor component. */\nconst BUILTIN_EDITORS: Readonly<Record<string, Type<unknown>>> = {\n text: KjTextEditor,\n number: KjNumberEditor,\n date: KjDateEditor,\n boolean: KjBooleanEditor,\n select: KjSelectEditor,\n};\n\n/** Lookup of column type → built-in filter UI. */\nconst BUILTIN_FILTERS: Readonly<Record<string, Type<unknown>>> = {\n text: KjTextFilter,\n number: KjNumberFilter,\n date: KjDateFilter,\n select: KjSelectFilter,\n};\n\n/**\n * Themed root data table built on top of the headless `@kouji-ui/core` table\n * directives. Wires TanStack-backed `<table>` rendering, ARIA grid semantics,\n * density / variant tokens, content projection slots (toolbar, side-panel,\n * empty, error, loading, row-expansion), persistence, virtualization,\n * resource-backed data, inline editing, and column resizing.\n *\n * Three data modes:\n * - **Static**: pass `kjData` as a plain array.\n * - **Signal**: pass a signal of rows via `kjData`.\n * - **Resource**: pass a `ResourceRef<KjResourceResult<T>>` via `kjResource`;\n * `kjData` is ignored and loading / error are derived from the resource.\n *\n * @example\n * ```html\n * <kj-table [kjData]=\"rows()\" [kjColumns]=\"cols\" kjDensity=\"compact\" />\n * ```\n *\n * @doc-example Default [full]\n * The smallest possible `<kj-table>` — three columns, five rows.\n * @doc-file table.example.ts\n * @doc-example Usage [full]\n * Full host API: density toggle, bordered variant, toolbar / pagination /\n * status-bar slots projected.\n * @doc-file table.usage.example.ts\n * @doc-example Sortable [full]\n * Click a header to sort; click again to flip direction; third click clears.\n * Shift-click a second header to add a secondary sort.\n * @doc-file table.sortable.example.ts\n * @doc-example Filterable [full]\n * `[kjEnableFilters]=\"true\"` renders a filter row under each header. Built-in\n * text / number / date / select filters pick by `kjType`.\n * @doc-file table.filterable.example.ts\n * @doc-example Selection [full]\n * Multi-row selection with status-bar count + bulk-action slot.\n * @doc-file table.selection.example.ts\n * @doc-example Inline editing [full]\n * Double-click a cell to mount the matching editor; Enter commits, Escape\n * cancels. Listen to `(cellEdit)` and persist yourself.\n * @doc-file table.editable.example.ts\n * @doc-example Column visibility [full]\n * Show / hide columns via the toolbar's visibility menu.\n * @doc-file table.column-visibility.example.ts\n * @doc-example Column resize [full]\n * `[kjEnableResize]=\"true\"` puts a grab handle on each `<th>` border.\n * @doc-file table.column-resize.example.ts\n * @doc-example Column pinning [full]\n * `kjPin: 'left' | 'right'` on a column meta pins it. Unpinned columns\n * scroll horizontally between the pinned edges.\n * @doc-file table.column-pinning.example.ts\n * @doc-example Row pinning [full]\n * Pin rows top / bottom via TanStack's row-pinning state.\n * @doc-file table.row-pinning.example.ts\n * @doc-example Grouping [full]\n * Group by a column; toggle group rows to collapse / expand.\n * @doc-file table.grouping.example.ts\n * @doc-example Master / detail [full]\n * `<ng-template #kjRowExpansion let-row>` renders below the expanded row.\n * @doc-file table.master-detail.example.ts\n * @doc-example Virtualized [full]\n * `[kjVirtual]=\"true\"` (or `'auto'` past 200 rows) windows the body via\n * `@tanstack/virtual-core`.\n * @doc-file table.virtualized.example.ts\n * @doc-example Density [full]\n * `compact` / `standard` / `comfortable` adjust row padding.\n * @doc-file table.density.example.ts\n * @doc-example Theming [full]\n * `bordered` / `striped` / `clean` variants for visual weight.\n * @doc-file table.theming.example.ts\n * @doc-example Server mode [full]\n * `kjTableResource()` wires the table state into an async loader; pagination\n * and filtering round-trip through your endpoint.\n * @doc-file table.server-mode.example.ts\n * @doc-example Persistence [full]\n * `[kjStorageKey]` + a `KjStorageAdapter` round-trip sort / filter / pinning\n * / visibility / density through reload.\n * @doc-file table.persistence.example.ts\n * @doc-example Export [full]\n * CSV / JSON / clipboard export via `data-table-export` utilities, wired to\n * the toolbar's export menu.\n * @doc-file table.export.example.ts\n * @doc-example Empty and error [full]\n * Project `[kjEmpty]` / `[kjError]` slots to override the defaults.\n * @doc-file table.empty-and-error.example.ts\n * @doc-example Keyboard [full]\n * Arrow / Home / End / Ctrl+Home/End / PageUp/Down / F2 / Enter / Esc /\n * Space / Cmd+A — full WAI-ARIA Grid pattern.\n * @doc-file table.keyboard.example.ts\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name table\n * @doc-is-main\n * @doc-description Themed data table built on TanStack — slots for toolbar, side panel, empty/error/loading; inline editing, filtering, resize, persistence, virtualization, resource-backed data.\n */\n@Component({\n selector: 'kj-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n // `hostDirectives: [KjTable]` hoists the core directive (and its\n // `KJ_TABLE` provider) onto the `<kj-table>` host element so projected\n // content — `<kj-table-toolbar>`, `<kj-table-status-bar>`,\n // `<kj-table-pagination>` — can `inject(KJ_TABLE)` from its element\n // injector. The aliased inputs expose the directive surface under\n // wrapper-friendly names (`kjColumns`, `kjData`, `kjGetRowId`).\n hostDirectives: [\n {\n directive: KjTable,\n inputs: ['kjTable: kjColumns', 'kjTableData: kjData', 'kjGetRowId'],\n },\n ],\n imports: [\n KjTableHeader,\n KjTableRow,\n KjTableCell,\n KjTableKeyboardNav,\n KjTableVirtual,\n KjIconDirective,\n KjCheckboxComponent,\n KjCellEditorOutlet,\n KjFilterCellOutlet,\n NgTemplateOutlet,\n ],\n host: {\n // Read density from the hosted directive's signal — both the wrapper's\n // `kjDensity` input AND the toolbar's density toggle write through to\n // `KjTable.density` via `setState({ density })`, so a single source of\n // truth drives the `data-density` host attribute.\n '[attr.data-density]': 't.state.density()',\n '[attr.data-variant]': 'kjVariant()',\n '[attr.data-loading]': 'isLoading() ? \"\" : null',\n '[attr.data-error]': 'hasError() ? \"\" : null',\n },\n template: `\n <div class=\"kj-table-wrapper\">\n <!-- Toolbar projection: matches either an explicit [kjToolbar] marker\n OR the styled <kj-table-toolbar> element directly, so users don't\n have to remember the marker attribute. -->\n <ng-content select=\"kj-table-toolbar, [kjToolbar]\" />\n\n <div class=\"kj-table-body\">\n <table kjTableKeyboardNav\n role=\"grid\"\n [attr.aria-rowcount]=\"aria.rowCount()\"\n [attr.aria-colcount]=\"aria.colCount()\"\n >\n <thead>\n @for (g of t.table().getHeaderGroups(); track g.id) {\n <tr role=\"row\">\n @if (showSelectionColumn()) {\n <th scope=\"col\" class=\"kj-table-select-cell\">\n @if (kjSelectionMode() === 'multi') {\n <kj-checkbox\n [checked]=\"t.table().getIsAllPageRowsSelected()\"\n [indeterminate]=\"t.table().getIsSomePageRowsSelected()\"\n (checkedChange)=\"onSelectAll($event)\"\n kjAriaLabel=\"Select all rows\"\n />\n }\n </th>\n }\n @for (h of g.headers; track h.id) {\n <th kjTableHeader\n [kjHeader]=\"h\"\n scope=\"col\"\n [style.width.px]=\"kjEnableResize() ? h.getSize() : null\"\n [attr.data-pin]=\"headerPin(h)\"\n [attr.data-resizing]=\"h.column.getIsResizing?.() ? '' : null\"\n [style.--kj-resize-delta.px]=\"t.columnSizingInfo().deltaOffset ?? 0\"\n >\n {{ h.column.columnDef.header }}\n @if (h.column.getCanSort?.()) {\n <i\n class=\"kj-table-sort-indicator\"\n kjIconSize=\"sm\"\n aria-hidden=\"true\"\n [kjIcon]=\"sortIcon(h)\"\n ></i>\n }\n @if (kjEnableResize() && h.column.getCanResize?.()) {\n <span\n class=\"kj-table-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize column\"\n (mousedown)=\"h.getResizeHandler()($event)\"\n (touchstart)=\"h.getResizeHandler()($event)\"\n ></span>\n }\n </th>\n }\n </tr>\n }\n @if (kjEnableFilters()) {\n <tr role=\"row\" class=\"kj-table-filter-row\">\n @if (showSelectionColumn()) {\n <th scope=\"col\" class=\"kj-table-select-cell\"></th>\n }\n @for (g of t.table().getHeaderGroups(); track g.id) {\n @for (h of g.headers; track h.id) {\n <th scope=\"col\" class=\"kj-table-filter-cell\">\n @if (filterTypeFor(h.column); as ft) {\n <span\n kjFilterCell\n class=\"kj-table-filter-anchor\"\n [kjColumn]=\"h.column\"\n [kjFilter]=\"filterRendererFor(h.column, ft)\"\n ></span>\n }\n </th>\n }\n }\n </tr>\n }\n </thead>\n\n @if (kjEnableRowPinning() && t.table().getTopRows().length > 0) {\n <tbody class=\"kj-table-tbody-pinned\" data-pin=\"top\">\n @for (r of t.table().getTopRows(); track r.id) {\n <tr kjTableRow [kjRow]=\"r\"\n (click)=\"onRowClick(r, $event)\"\n (dblclick)=\"onRowDblClick(r, $event)\">\n @if (showSelectionColumn()) {\n <td class=\"kj-table-select-cell\"\n (mousedown)=\"rememberClickModifiers($event)\"\n (click)=\"$event.stopPropagation()\">\n <kj-checkbox\n [checked]=\"r.getIsSelected()\"\n (checkedChange)=\"onRowCheckboxToggle(r)\"\n kjAriaLabel=\"Select row\"\n />\n </td>\n }\n @for (c of r.getVisibleCells(); track c.id) {\n <td kjTableCell [kjCell]=\"c\" tabindex=\"-1\"\n [class.kj-table-cell--editing]=\"isEditing(c)\"\n (click)=\"onCellClick(c, $event)\"\n (dblclick)=\"onCellDblClick(c, $event)\"\n (keydown)=\"onCellKeydown(c, $event)\">\n @if (isEditing(c)) {\n <span class=\"kj-table-cell-ghost\" aria-hidden=\"true\">{{ c.getValue() }}</span>\n <span\n kjCellEditorOutlet\n class=\"kj-table-editor-anchor\"\n [kjEditor]=\"editorTypeFor(c)\"\n [kjValue]=\"c.getValue()\"\n [kjMeta]=\"editorMetaFor(c)\"\n (commit)=\"onEditorCommit(c, $event)\"\n (editCancel)=\"onEditorCancel()\"\n ></span>\n } @else {\n {{ c.getValue() }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n }\n\n @if (shouldVirtualize()) {\n <tbody\n kjTableVirtual\n [kjCount]=\"centerRows().length\"\n [kjEstimateSize]=\"kjEstimatedRowSize()\"\n #v=\"kjTableVirtual\"\n >\n @if (v.paddingTop() > 0) {\n <tr aria-hidden=\"true\">\n <td [attr.colspan]=\"aria.colCount()\" [style.height.px]=\"v.paddingTop()\"></td>\n </tr>\n }\n @for (vr of v.virtualRows(); track vr.key) {\n @if (centerRows()[vr.index]; as r) {\n <tr kjTableRow [kjRow]=\"r\"\n (click)=\"onRowClick(r, $event)\"\n (dblclick)=\"onRowDblClick(r, $event)\">\n @if (showSelectionColumn()) {\n <td class=\"kj-table-select-cell\"\n (mousedown)=\"rememberClickModifiers($event)\"\n (click)=\"$event.stopPropagation()\">\n <kj-checkbox\n [checked]=\"r.getIsSelected()\"\n (checkedChange)=\"onRowCheckboxToggle(r)\"\n kjAriaLabel=\"Select row\"\n />\n </td>\n }\n @for (c of r.getVisibleCells(); track c.id) {\n <td kjTableCell [kjCell]=\"c\" tabindex=\"-1\"\n [class.kj-table-cell--editing]=\"isEditing(c)\"\n [style.width.px]=\"kjEnableResize() ? c.column.getSize() : null\"\n (click)=\"onCellClick(c, $event)\"\n (dblclick)=\"onCellDblClick(c, $event)\"\n (keydown)=\"onCellKeydown(c, $event)\">\n @if (isEditing(c)) {\n <span class=\"kj-table-cell-ghost\" aria-hidden=\"true\">{{ c.getValue() }}</span>\n <span\n kjCellEditorOutlet\n class=\"kj-table-editor-anchor\"\n [kjEditor]=\"editorTypeFor(c)\"\n [kjValue]=\"c.getValue()\"\n [kjMeta]=\"editorMetaFor(c)\"\n (commit)=\"onEditorCommit(c, $event)\"\n (editCancel)=\"onEditorCancel()\"\n ></span>\n } @else {\n {{ c.getValue() }}\n }\n </td>\n }\n </tr>\n @if (kjRowExpansionTpl() && r.getIsExpanded?.()) {\n <tr class=\"kj-table-expansion-row\">\n <td [attr.colspan]=\"aria.colCount()\">\n <ng-container\n [ngTemplateOutlet]=\"kjRowExpansionTpl()!\"\n [ngTemplateOutletContext]=\"{ $implicit: r.original, row: r.original }\"\n />\n </td>\n </tr>\n }\n }\n }\n @if (v.paddingBottom() > 0) {\n <tr aria-hidden=\"true\">\n <td [attr.colspan]=\"aria.colCount()\" [style.height.px]=\"v.paddingBottom()\"></td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n @for (r of centerRows(); track r.id) {\n <tr kjTableRow [kjRow]=\"r\"\n [attr.data-row-grouped]=\"r.getIsGrouped?.() ? '' : null\"\n (click)=\"onRowClick(r, $event)\"\n (dblclick)=\"onRowDblClick(r, $event)\">\n @if (showSelectionColumn()) {\n <td class=\"kj-table-select-cell\"\n (mousedown)=\"rememberClickModifiers($event)\"\n (click)=\"$event.stopPropagation()\">\n <kj-checkbox\n [checked]=\"r.getIsSelected()\"\n (checkedChange)=\"onRowCheckboxToggle(r)\"\n kjAriaLabel=\"Select row\"\n />\n </td>\n }\n @for (c of r.getVisibleCells(); track c.id) {\n <td kjTableCell [kjCell]=\"c\" tabindex=\"-1\"\n [class.kj-table-cell--editing]=\"isEditing(c)\"\n [style.width.px]=\"kjEnableResize() ? c.column.getSize() : null\"\n (click)=\"onCellClick(c, $event)\"\n (dblclick)=\"onCellDblClick(c, $event)\"\n (keydown)=\"onCellKeydown(c, $event)\">\n @if (isEditing(c)) {\n <span class=\"kj-table-cell-ghost\" aria-hidden=\"true\">{{ c.getValue() }}</span>\n <span\n kjCellEditorOutlet\n class=\"kj-table-editor-anchor\"\n [kjEditor]=\"editorTypeFor(c)\"\n [kjValue]=\"c.getValue()\"\n [kjMeta]=\"editorMetaFor(c)\"\n (commit)=\"onEditorCommit(c, $event)\"\n (editCancel)=\"onEditorCancel()\"\n ></span>\n } @else if (c.getIsGrouped?.()) {\n <button type=\"button\"\n class=\"kj-table-group-toggle\"\n [attr.aria-expanded]=\"r.getIsExpanded?.() ? 'true' : 'false'\"\n (click)=\"onGroupToggle(r, $event)\">\n <span class=\"kj-table-group-toggle__chevron\" aria-hidden=\"true\">›</span>\n {{ c.getValue() }}\n <span class=\"kj-table-group-toggle__count\">({{ r.subRows?.length ?? 0 }})</span>\n </button>\n } @else if (c.getIsAggregated?.()) {\n {{ c.renderValue() }}\n } @else if (c.getIsPlaceholder?.()) {\n } @else {\n {{ c.getValue() }}\n }\n </td>\n }\n </tr>\n @if (kjRowExpansionTpl() && r.getIsExpanded?.() && !r.getIsGrouped?.()) {\n <tr class=\"kj-table-expansion-row\">\n <td [attr.colspan]=\"aria.colCount()\">\n <ng-container\n [ngTemplateOutlet]=\"kjRowExpansionTpl()!\"\n [ngTemplateOutletContext]=\"{ $implicit: r.original, row: r.original }\"\n />\n </td>\n </tr>\n }\n }\n </tbody>\n }\n\n @if (kjEnableRowPinning() && t.table().getBottomRows().length > 0) {\n <tbody class=\"kj-table-tbody-pinned\" data-pin=\"bottom\">\n @for (r of t.table().getBottomRows(); track r.id) {\n <tr kjTableRow [kjRow]=\"r\"\n (click)=\"onRowClick(r, $event)\"\n (dblclick)=\"onRowDblClick(r, $event)\">\n @if (showSelectionColumn()) {\n <td class=\"kj-table-select-cell\"\n (mousedown)=\"rememberClickModifiers($event)\"\n (click)=\"$event.stopPropagation()\">\n <kj-checkbox\n [checked]=\"r.getIsSelected()\"\n (checkedChange)=\"onRowCheckboxToggle(r)\"\n kjAriaLabel=\"Select row\"\n />\n </td>\n }\n @for (c of r.getVisibleCells(); track c.id) {\n <td kjTableCell [kjCell]=\"c\" tabindex=\"-1\">{{ c.getValue() }}</td>\n }\n </tr>\n }\n </tbody>\n }\n </table>\n\n <ng-content select=\"[kjSidePanel]\" />\n </div>\n\n @if (showEmpty()) {\n <div class=\"kj-table-empty\" role=\"status\">\n <ng-content select=\"[kjEmpty]\" />\n </div>\n }\n @if (hasError()) {\n <div class=\"kj-table-error\" role=\"alert\">\n <ng-content select=\"[kjError]\" />\n </div>\n }\n @if (isLoading()) {\n <div class=\"kj-table-loading\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n [attr.data-has-rows]=\"effectiveData().length > 0 ? '' : null\">\n <ng-content select=\"[kjLoading]\">\n <span class=\"kj-table-loading-fallback\">Loading…</span>\n </ng-content>\n </div>\n }\n\n <ng-content />\n </div>\n `,\n styleUrl: './table.css',\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class KjTableComponent<TData extends RowData = unknown> {\n // ── Data ────────────────────────────────────────────────────────────────\n // `kjColumns`, `kjData`, `kjGetRowId` are exposed via `hostDirectives` input\n // forwarding (see the `@Component` metadata) — bindings on `<kj-table>`\n // flow straight into the hosted `KjTable` directive. We read them back via\n // the injected directive instance (`this.t`) when the wrapper needs them.\n\n /**\n * Resource-backed data source. When set, rows come from\n * `kjResource.value().rows`, `kjLoading` is derived from `isLoading()`, and\n * the error slot renders when `error()` is non-null. The wrapper writes\n * the resolved rows into the hosted `KjTable.kjTableData` model — the\n * underlying TanStack instance always sees a single rows source.\n */\n readonly kjResource = input<ResourceRef<KjResourceResult<TData> | undefined> | null>(null);\n\n // ── Theming ─────────────────────────────────────────────────────────────\n readonly kjDensity = input<'compact' | 'standard' | 'comfortable'>('standard');\n readonly kjVariant = input<'bordered' | 'striped' | 'clean'>('bordered');\n /** External \"I'm loading\" flag, ORed with the resource's `isLoading()`. */\n readonly kjLoading = input(false);\n\n // ── Selection ───────────────────────────────────────────────────────────\n readonly kjSelection = model<Set<string> | string | null>(null);\n readonly kjSelectionMode = input<'single' | 'multi' | 'none'>('none');\n /**\n * Whether the wrapper auto-renders a leading checkbox column. Defaults to\n * `true` whenever selection is enabled; set `false` to drive selection\n * purely from row clicks / external state without the column.\n */\n readonly kjShowSelectionColumn = input<boolean>(true);\n\n // ── Persistence ─────────────────────────────────────────────────────────\n readonly kjStorageKey = input<string | null>(null);\n readonly kjStorageAdapter = input<KjStorageAdapter | null>(null);\n\n // ── Virtualization ──────────────────────────────────────────────────────\n readonly kjVirtual = input<boolean | 'auto'>('auto');\n readonly kjEstimatedRowSize = input<number>(36);\n\n // ── Feature toggles ─────────────────────────────────────────────────────\n readonly kjEnableFilters = input<boolean>(false);\n readonly kjEnableResize = input<boolean>(false);\n readonly kjEnableRowPinning = input<boolean>(false);\n readonly kjEditOnDoubleClick = input<boolean>(true);\n\n // ── Row expansion template ─────────────────────────────────────────────\n /** Template for master-detail row expansion. Receives `$implicit = row`. */\n readonly kjRowExpansionTpl = contentChild<TemplateRef<unknown>>('kjRowExpansion');\n\n // ── Outputs ─────────────────────────────────────────────────────────────\n readonly cellEdit = output<KjCellEditEvent<TData>>();\n readonly stateChange = output<KjTableState>();\n readonly rowClick = output<KjRowClickEvent<TData>>();\n readonly rowDoubleClick = output<KjRowClickEvent<TData>>();\n\n // ── Refs ────────────────────────────────────────────────────────────────\n /**\n * The hosted `KjTable` directive instance. Exposed under the legacy\n * `tableRef()` API for examples that drive the table imperatively\n * (`tableRef().setState(...)`, `tableRef().setRowPinning(...)`).\n *\n * `t` is the template-side alias for the same instance, used everywhere\n * the template needs the TanStack table proxy (`t.table().getRowModel()`).\n */\n protected readonly t = inject(KjTable) as unknown as KjTable<TData>;\n readonly tableRef = (): KjTable<TData> => this.t;\n\n // ── Internal state ──────────────────────────────────────────────────────\n private readonly tokenStorage = inject(KJ_TABLE_STORAGE, { optional: true });\n\n /** Tracks the cell currently in edit mode by row+column id. */\n protected readonly editingCell = signal<{ rowId: string; columnId: string } | null>(null);\n\n // ── Computed ────────────────────────────────────────────────────────────\n /**\n * Effective rows driving TanStack:\n * - `kjResource` set → unwrap `resource.value().rows`\n * - otherwise → use the hosted directive's `kjTableData` model\n * (fed by `[kjData]` on the host).\n */\n protected readonly effectiveData = computed<TData[]>(() => {\n const res = this.kjResource();\n if (res) {\n // Skip `.value()` when the resource is in error / loading — both throw\n // or return stale data. The error / loading panes render instead, and\n // the table model holds whatever the write-through effect last set.\n if (res.error() != null || res.isLoading()) return [];\n const v = res.value();\n const rows = v?.rows;\n return rows ? Array.from(rows) : [];\n }\n return this.t.kjTableData();\n });\n\n /**\n * All center (non-pinned) rows from TanStack.\n *\n * When virtualization is active we skip pagination — the virtualizer is the\n * windowing mechanism, so feeding it a 25-row page (TanStack's default) makes\n * a 10k dataset look like 25 rows that can't scroll. `getPrePaginationRowModel`\n * keeps sort + filter applied but returns the full slice.\n */\n protected readonly centerRows = computed<Row<TData>[]>(() => {\n const tbl = this.t.table();\n if (this.kjEnableRowPinning()) return tbl.getCenterRows();\n return this.shouldVirtualize()\n ? tbl.getPrePaginationRowModel().rows\n : tbl.getRowModel().rows;\n });\n\n /**\n * Whether the leading checkbox column should render. Auto-enables when\n * selection mode is non-`none` AND the user hasn't opted out.\n */\n protected readonly showSelectionColumn = computed<boolean>(\n () => this.kjSelectionMode() !== 'none' && this.kjShowSelectionColumn(),\n );\n\n /**\n * Captured at mousedown on a select-cell so the subsequent checkbox\n * `checkedChange` can branch on shift / ctrl/cmd without losing the modifier\n * state (the keyboard modifiers are only on the originating MouseEvent;\n * the change event from kj-checkbox doesn't carry them).\n */\n private lastClickShift = false;\n private lastAnchorRowId: string | null = null;\n\n /** True when the active resource is loading OR `kjLoading` is set. */\n protected readonly isLoading = computed<boolean>(() => {\n if (this.kjLoading()) return true;\n const res = this.kjResource();\n return res ? res.isLoading() : false;\n });\n\n /** True when the active resource is in error state. */\n protected readonly hasError = computed<boolean>(() => {\n const res = this.kjResource();\n return res ? res.error() != null : false;\n });\n\n /** True when there are no rows AND we are not loading or errored. */\n protected readonly showEmpty = computed<boolean>(\n () => this.effectiveData().length === 0 && !this.isLoading() && !this.hasError(),\n );\n\n /**\n * Whether row virtualization should be enabled. Counts against the\n * pre-pagination row model so `'auto'` flips on for large datasets that\n * would otherwise be split across paginated pages.\n */\n protected readonly shouldVirtualize = computed<boolean>(() => {\n const mode = this.kjVirtual();\n if (mode === true) return true;\n if (mode === false) return false;\n return this.t.table().getPrePaginationRowModel().rows.length > VIRTUAL_AUTO_THRESHOLD;\n });\n\n protected readonly aria = {\n rowCount: computed(() => this.effectiveData().length + 1),\n colCount: computed(() => {\n const cols = this.t.kjTable();\n // Approximate: flatten one level of column groups for ARIA.\n let n = 0;\n for (const c of cols) {\n const sub = (c as { columns?: unknown[] }).columns;\n n += Array.isArray(sub) ? sub.length : 1;\n }\n return n;\n }),\n };\n\n constructor() {\n // Wrapper's `kjDensity` input → hosted directive's density state. Both\n // the user's external binding AND the toolbar's density toggle write\n // into `KjTable.density` via `setState`, so a single source of truth\n // backs the host's `data-density` attribute and the row-padding CSS.\n //\n // The internal `t.density()` read is wrapped in `untracked` so the\n // effect only fires on `kjDensity` input changes — without that, a\n // toolbar click would update `t.density`, re-trigger this effect, and\n // get clobbered back to the input value (feedback loop).\n effect(() => {\n const next = this.kjDensity();\n untracked(() => {\n if (this.t.state.density() !== next) this.t.setState({ density: next });\n });\n });\n\n // Pipe resource rows into the hosted KjTable.kjTableData model so the\n // single TanStack instance always sees one rows source. When kjResource\n // is null the user's `[kjData]` binding flows through unchanged.\n //\n // `resource.value()` throws when the resource is in an error state\n // (Angular's contract — read errors live on `.error()`). We guard on\n // both `error()` and `isLoading()` so the error / loading panes own the\n // UX while the table model keeps the last-known rows empty.\n effect(() => {\n const res = this.kjResource();\n if (!res) {\n // No resource → clear the manual-pagination total so the table\n // falls back to client-side pagination on the user's `[kjData]`.\n this.t.setRowCount(null);\n return;\n }\n if (res.error() != null) {\n this.t.kjTableData.set([]);\n return;\n }\n if (res.isLoading()) return;\n const value = res.value();\n const rows = value?.rows;\n this.t.kjTableData.set(rows ? Array.from(rows) as TData[] : []);\n // Flip into manual-pagination mode and report the remote total\n // so the pagination footer / status bar see the full dataset\n // instead of just the current page slice.\n this.t.setRowCount(value?.rowCount ?? null);\n });\n\n // Persistence: on init, read from adapter and seed table state.\n effect(() => {\n const key = this.kjStorageKey();\n if (!key) return;\n const adapter = this.kjStorageAdapter() ?? this.tokenStorage;\n if (!adapter) return;\n const tbl = untracked(() => this.t);\n if (!tbl) return;\n const persisted = adapter.read<Partial<KjTableState>>(key);\n if (persisted) {\n untracked(() => tbl.setState(persisted));\n }\n });\n\n // Persistence: watch state and write through. Reading `state()` once\n // is enough — the single signal invalidates on any slice change.\n effect(() => {\n const key = this.kjStorageKey();\n if (!key) return;\n const adapter = this.kjStorageAdapter() ?? this.tokenStorage;\n if (!adapter) return;\n adapter.write(key, this.t.state());\n });\n\n // State-change emission.\n effect(() => {\n this.stateChange.emit(this.t.state());\n });\n }\n\n // ── Cell-edit handlers ──────────────────────────────────────────────────\n protected isEditing(cell: Cell<TData, unknown>): boolean {\n const e = this.editingCell();\n return !!e && e.rowId === cell.row.id && e.columnId === cell.column.id;\n }\n\n protected onCellClick(cell: Cell<TData, unknown>, _event: MouseEvent): void {\n if (this.kjEditOnDoubleClick()) return;\n this.tryBeginEdit(cell);\n }\n\n protected onCellDblClick(cell: Cell<TData, unknown>, _event: MouseEvent): void {\n if (!this.kjEditOnDoubleClick()) return;\n this.tryBeginEdit(cell);\n }\n\n protected onCellKeydown(cell: Cell<TData, unknown>, event: KeyboardEvent): void {\n if (event.key === 'F2') {\n event.preventDefault();\n this.tryBeginEdit(cell);\n } else if (event.key === 'Escape' && this.isEditing(cell)) {\n this.editingCell.set(null);\n } else if (event.key === ' ' && !this.isEditing(cell)) {\n // Space toggles row selection when selection is enabled (WCAG grid pattern).\n const mode = this.kjSelectionMode();\n if (mode === 'multi') {\n event.preventDefault();\n (cell.row as { toggleSelected?: () => void }).toggleSelected?.();\n } else if (mode === 'single') {\n event.preventDefault();\n this.t.table().setRowSelection({ [cell.row.id]: true });\n }\n } else if ((event.ctrlKey || event.metaKey) && (event.key === 'a' || event.key === 'A')) {\n // Cmd/Ctrl+A — select all (multi mode only).\n if (this.kjSelectionMode() === 'multi') {\n event.preventDefault();\n this.t.table().toggleAllRowsSelected(true);\n }\n }\n }\n\n private tryBeginEdit(cell: Cell<TData, unknown>): void {\n const meta = cellMeta(cell.column);\n if (!meta?.editable) return;\n this.editingCell.set({ rowId: cell.row.id, columnId: cell.column.id });\n }\n\n // ── Row-click handlers ──────────────────────────────────────────────────\n protected onRowClick(row: Row<TData>, event: MouseEvent): void {\n // A click that lands on an interactive control inside the row (group\n // toggle button, inline editor, link, etc.) should not double-toggle\n // row selection — only bare-row clicks count.\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, a, input, select, textarea, .kj-table-editor-anchor')) {\n this.rowClick.emit({ row: row.original, event });\n return;\n }\n this.applySelectionFromClick(row, event);\n this.rowClick.emit({ row: row.original, event });\n }\n\n protected onRowDblClick(row: Row<TData>, event: MouseEvent): void {\n this.rowDoubleClick.emit({ row: row.original, event });\n }\n\n /**\n * Toggle / replace row selection based on `kjSelectionMode`:\n * - `'multi'` → plain click toggles this row and moves the anchor.\n * Shift-click selects every row between the anchor and here (range).\n * Ctrl/Cmd-click toggles this row only (anchor moves, others kept).\n * - `'single'` → set this row as the sole selection.\n * - `'none'` → no-op.\n */\n private applySelectionFromClick(row: Row<TData>, event: MouseEvent): void {\n const mode = this.kjSelectionMode();\n if (mode === 'none') return;\n const tbl = this.t.table();\n if (mode === 'single') {\n tbl.setRowSelection({ [row.id]: true });\n this.lastAnchorRowId = row.id;\n return;\n }\n // multi\n if (event.shiftKey && this.lastAnchorRowId !== null) {\n this.selectRange(this.lastAnchorRowId, row.id, true);\n return;\n }\n (row as { toggleSelected?: () => void }).toggleSelected?.();\n this.lastAnchorRowId = row.id;\n }\n\n /**\n * Capture the shift modifier from mousedown on a select-cell. The\n * checkbox's `checkedChange` doesn't carry the originating mouse event,\n * so we stash the modifier and consume it in `onRowCheckboxToggle`.\n */\n protected rememberClickModifiers(event: MouseEvent): void {\n this.lastClickShift = event.shiftKey;\n }\n\n /** Click on a row's checkbox: shift extends from anchor, else plain toggle. */\n protected onRowCheckboxToggle(row: Row<TData>): void {\n const wasShift = this.lastClickShift;\n this.lastClickShift = false;\n if (wasShift && this.lastAnchorRowId !== null && this.kjSelectionMode() === 'multi') {\n this.selectRange(this.lastAnchorRowId, row.id, true);\n return;\n }\n (row as { toggleSelected?: () => void }).toggleSelected?.();\n this.lastAnchorRowId = row.id;\n }\n\n /** Header \"select all\" checkbox change. */\n protected onSelectAll(checked: boolean): void {\n this.t.table().toggleAllPageRowsSelected(checked);\n }\n\n /**\n * Set every row between `fromId` and `toId` (inclusive, order-agnostic) to\n * `selected`. Existing selections OUTSIDE that window are preserved.\n */\n private selectRange(fromId: string, toId: string, selected: boolean): void {\n const rows = this.centerRows();\n const fromIdx = rows.findIndex((r) => r.id === fromId);\n const toIdx = rows.findIndex((r) => r.id === toId);\n if (fromIdx === -1 || toIdx === -1) return;\n const [start, end] = fromIdx < toIdx ? [fromIdx, toIdx] : [toIdx, fromIdx];\n const next: Record<string, boolean> = { ...this.t.state.rowSelection() };\n for (let i = start; i <= end; i++) {\n next[rows[i].id] = selected;\n }\n this.t.table().setRowSelection(next);\n }\n\n /**\n * Toggle a grouped row's expanded state. Wired to the click handler on the\n * group-cell's toggle button; `stopPropagation` prevents the parent row's\n * `(click)` from firing a row-click event for what is really a UI control.\n */\n protected onGroupToggle(row: Row<TData>, event: MouseEvent): void {\n event.stopPropagation();\n (row as { toggleExpanded?: () => void }).toggleExpanded?.();\n }\n\n // ── Header helpers ──────────────────────────────────────────────────────\n protected headerPin(h: Header<TData, unknown>): 'left' | 'right' | null {\n const p = h.column.getIsPinned?.();\n return p === 'left' || p === 'right' ? p : null;\n }\n\n /**\n * Lucide icon name for a sortable header's indicator. We read the column's\n * current sort state directly so the template re-evaluates whenever the\n * parent sort signal changes (TanStack's table proxy is signal-backed).\n */\n protected sortIcon(h: Header<TData, unknown>): 'chevron-up' | 'chevron-down' | 'chevrons-up-down' {\n const dir = h.column.getIsSorted?.();\n if (dir === 'asc') return 'chevron-up';\n if (dir === 'desc') return 'chevron-down';\n return 'chevrons-up-down';\n }\n\n protected filterTypeFor(col: Column<TData, unknown>): string | null {\n const meta = (col.columnDef.meta as { kj?: KjColumnMeta<TData> } | undefined)?.kj;\n if (!meta) return null;\n if (meta.filterable === false) return null;\n const type = meta.type;\n if (!type) return null;\n return type in BUILTIN_FILTERS ? type : null;\n }\n\n // ── Template helpers for the editor / filter outlet directives ─────────\n /** Resolves the editor component for a cell — column `meta.kj.editor`\n * override, else the built-in editor that matches `meta.kj.type`. */\n protected editorTypeFor(cell: Cell<TData, unknown>): Type<unknown> | null {\n const meta = (cell.column.columnDef.meta as { kj?: KjColumnMeta<TData> } | undefined)?.kj;\n const custom = meta?.editor as Type<unknown> | undefined;\n if (custom) return custom;\n const type = meta?.type;\n if (!type) return BUILTIN_EDITORS['text']!;\n return BUILTIN_EDITORS[type] ?? null;\n }\n\n /** Build the meta bag handed to the editor through `KJ_EDITOR_CONTRACT`.\n * Select options, min/max, custom params travel through here so editors\n * don't need imperative input binding from the outlet. */\n protected editorMetaFor(cell: Cell<TData, unknown>): Record<string, unknown> | undefined {\n const meta = (cell.column.columnDef.meta as { kj?: KjColumnMeta<TData> } | undefined)?.kj;\n if (!meta) return undefined;\n const out: Record<string, unknown> = {};\n if (meta.selectOptions) out['options'] = meta.selectOptions;\n return Object.keys(out).length > 0 ? out : undefined;\n }\n\n /** Resolves the filter component for a column — `meta.kj.filterUi` override\n * else the built-in filter that matches `type`. */\n protected filterRendererFor(col: Column<TData, unknown>, type: string): Type<unknown> | null {\n const meta = (col.columnDef.meta as { kj?: KjColumnMeta<TData> } | undefined)?.kj;\n const custom = meta?.filterUi as Type<unknown> | undefined;\n return custom ?? BUILTIN_FILTERS[type] ?? null;\n }\n\n /** Editor `(commit)` from `KjCellEditorOutlet`: forward + close the editor. */\n protected onEditorCommit(cell: Cell<TData, unknown>, next: unknown): void {\n this.cellEdit.emit({\n row: cell.row.original,\n columnId: cell.column.id,\n oldValue: cell.getValue(),\n newValue: next,\n });\n this.editingCell.set(null);\n }\n\n /** Editor `(cancel)` from `KjCellEditorOutlet`: just close the editor. */\n protected onEditorCancel(): void {\n this.editingCell.set(null);\n }\n}\n\n// ── helpers ───────────────────────────────────────────────────────────────\nfunction cellMeta<TData>(col: Column<TData, unknown>): KjColumnMeta<TData> | undefined {\n return (col.columnDef.meta as { kj?: KjColumnMeta<TData> } | undefined)?.kj;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ViewEncapsulation,\n computed,\n inject,\n output,\n} from '@angular/core';\nimport { KJ_TABLE, KjTable } from '@kouji-ui/core';\nimport { KjInputComponent } from '../input/input';\nimport { KjButtonComponent } from '../button/button';\nimport { KjButtonGroupComponent } from '../button-group/button-group';\nimport { KjCheckboxComponent } from '../checkbox/checkbox';\nimport {\n KjDropdownMenuTrigger,\n KjDropdownMenuContent,\n KjDropdownMenuItem,\n KjDropdownMenuSeparator,\n} from '@kouji-ui/core';\n\n/** Density value emitted by the density toggle group. */\nexport type KjTableDensity = 'compact' | 'standard' | 'comfortable';\n\n/** Export format requested via the toolbar's export menu. */\nexport type KjTableExportFormat = 'csv' | 'json' | 'clipboard';\n\n/**\n * Marker directive for bulk-action content projected into\n * `<kj-table-toolbar>`. Bulk content is only rendered when the host\n * table has any selected rows.\n *\n * @example\n * ```html\n * <kj-table-toolbar>\n * <kj-button kjVariant=\"destructive\" kjBulkAction>Delete</kj-button>\n * </kj-table-toolbar>\n * ```\n */\n@Directive({\n selector: '[kjBulkAction]',\n standalone: true,\n})\nexport class KjBulkAction {}\n\n/**\n * Toolbar chrome for `<kj-table>`. Composes:\n *\n * - **Quick filter input** — bound to `KjTable.globalFilter()`; typing writes\n * `setState({ globalFilter })`.\n * - **Density toggle group** — three segmented buttons (compact / standard /\n * comfortable) bound to `KjTable.density()`.\n * - **Column visibility menu** — dropdown listing every leaf column with a\n * checkbox; toggling writes `setState({ columnVisibility })`.\n * - **Export menu** — dropdown with CSV / JSON / Clipboard items. Items emit\n * the `(export)` output; the parent table wires the actual export utility\n * in Phase C.\n * - **Bulk-action slot** — `<ng-content select=\"[kjBulkAction]\">` shown only\n * when at least one row is selected.\n *\n * The toolbar must sit inside a `<kj-table>` (or any element hosting\n * the `KJ_TABLE` token) so it can resolve the table instance via DI.\n *\n * @doc-category Components/Data\n * @doc\n * @doc-name table-toolbar\n * @doc-description Toolbar chrome above the data table — quick filter, density, column visibility, export, and bulk-action slot.\n */\n@Component({\n selector: 'kj-table-toolbar',\n standalone: true,\n imports: [\n KjInputComponent,\n KjButtonComponent,\n KjButtonGroupComponent,\n KjCheckboxComponent,\n KjDropdownMenuTrigger,\n KjDropdownMenuContent,\n KjDropdownMenuItem,\n KjDropdownMenuSeparator,\n ],\n template: `\n <div class=\"kj-table-toolbar__filter\">\n <span class=\"kj-visually-hidden\">Quick filter</span>\n <kj-input\n type=\"search\"\n placeholder=\"Filter rows...\"\n [value]=\"globalFilter()\"\n (input)=\"onFilter($event)\"\n />\n </div>\n\n <kj-button-group\n class=\"kj-table-toolbar__density\"\n kjAriaLabel=\"Row density\"\n >\n <kj-button\n kjVariant=\"outline\"\n kjSize=\"sm\"\n [kjPressed]=\"density() === 'compact'\"\n kjAriaLabel=\"Compact density\"\n (click)=\"setDensity('compact')\"\n >Compact</kj-button>\n <kj-button\n kjVariant=\"outline\"\n kjSize=\"sm\"\n [kjPressed]=\"density() === 'standard'\"\n kjAriaLabel=\"Standard density\"\n (click)=\"setDensity('standard')\"\n >Standard</kj-button>\n <kj-button\n kjVariant=\"outline\"\n kjSize=\"sm\"\n [kjPressed]=\"density() === 'comfortable'\"\n kjAriaLabel=\"Comfortable density\"\n (click)=\"setDensity('comfortable')\"\n >Comfortable</kj-button>\n </kj-button-group>\n\n <kj-button\n kjDropdownMenuTrigger\n #colTrigger=\"kjDropdownMenuTrigger\"\n kjVariant=\"outline\"\n kjSize=\"sm\"\n >Columns</kj-button>\n <kj-dropdown-menu-content [kjFor]=\"colTrigger\">\n @for (col of leafColumns(); track col.id) {\n <div kjDropdownMenuItem role=\"menuitemcheckbox\" [attr.aria-checked]=\"isVisible(col.id)\">\n <kj-checkbox\n [checked]=\"isVisible(col.id)\"\n (checkedChange)=\"setColumnVisible(col.id, $event)\"\n >{{ columnLabel(col) }}</kj-checkbox>\n </div>\n }\n </kj-dropdown-menu-content>\n\n <kj-button\n kjDropdownMenuTrigger\n #expTrigger=\"kjDropdownMenuTrigger\"\n kjVariant=\"outline\"\n kjSize=\"sm\"\n >Export</kj-button>\n <kj-dropdown-menu-content [kjFor]=\"expTrigger\">\n <button kjDropdownMenuItem type=\"button\" (click)=\"emitExport('csv')\">Export as CSV</button>\n <button kjDropdownMenuItem type=\"button\" (click)=\"emitExport('json')\">Export as JSON</button>\n <hr kjDropdownMenuSeparator />\n <button kjDropdownMenuItem type=\"button\" (click)=\"emitExport('clipboard')\">Copy to clipboard</button>\n </kj-dropdown-menu-content>\n\n @if (hasSelection()) {\n <div class=\"kj-table-toolbar__bulk\" role=\"group\" aria-label=\"Bulk actions\">\n <ng-content select=\"[kjBulkAction]\" />\n </div>\n }\n `,\n styles: [`\n :host {\n display: flex;\n /* Stay on a single row even when a bulk-action slot appears — wrapping\n would push the table down. The filter shrinks to make room. */\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--kj-base-space-md, 0.75rem);\n padding: var(--kj-base-space-md, 0.75rem);\n }\n .kj-table-toolbar__filter { flex: 1 1 16rem; min-width: 6rem; display: flex; align-items: center; }\n .kj-table-toolbar__filter .kj-input { width: 100%; }\n .kj-table-toolbar__filter .kj-visually-hidden {\n position: absolute;\n width: 1px; height: 1px;\n padding: 0; margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n .kj-table-toolbar__bulk {\n display: flex;\n gap: var(--kj-base-space-sm, 0.5rem);\n margin-inline-start: auto;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-table-toolbar',\n 'role': 'toolbar',\n 'aria-label': 'Data table toolbar',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTableToolbarComponent {\n /** The host table — resolved through `KJ_TABLE` injected from any ancestor. */\n protected readonly table = inject<KjTable<unknown>>(KJ_TABLE);\n\n /** Emits when the user picks an export format from the toolbar's export menu. */\n readonly export = output<KjTableExportFormat>();\n\n protected readonly globalFilter = this.table.state.globalFilter;\n protected readonly density = this.table.state.density;\n\n /** All leaf columns from the TanStack table instance. Recomputes when columns change. */\n protected readonly leafColumns = computed(() => {\n const t = this.table.table();\n return t.getAllLeafColumns();\n });\n\n /** True when the host table has at least one selected row. */\n protected readonly hasSelection = computed(() => {\n const sel = this.table.state.rowSelection();\n for (const key in sel) {\n if (sel[key]) return true;\n }\n return false;\n });\n\n protected onFilter(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.table.setState({ globalFilter: value });\n }\n\n protected setDensity(value: KjTableDensity): void {\n this.table.setState({ density: value });\n }\n\n protected isVisible(columnId: string): boolean {\n const map = this.table.state.columnVisibility();\n // TanStack convention: a column is visible unless explicitly false.\n return map[columnId] !== false;\n }\n\n protected setColumnVisible(columnId: string, visible: boolean): void {\n const next = { ...this.table.state.columnVisibility(), [columnId]: visible };\n this.table.setState({ columnVisibility: next });\n }\n\n protected columnLabel(col: { id: string; columnDef: { header?: unknown } }): string {\n const header = col.columnDef.header;\n return typeof header === 'string' ? header : col.id;\n }\n\n protected emitExport(format: KjTableExportFormat): void {\n this.export.emit(format);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { KJ_TABLE, KjTable } from '@kouji-ui/core';\nimport {\n KjPaginationComponent,\n KjPaginationFirstComponent,\n KjPaginationPreviousComponent,\n KjPaginationNextComponent,\n KjPaginationLastComponent,\n} from '../pagination';\nimport { KjSelectComponent, KjOptionComponent } from '../select';\n\n/**\n * Pagination footer for `<kj-table>`. Reads the active TanStack table\n * instance via `KJ_TABLE` and writes through its mutation API\n * (`setPageIndex`, `setPageSize`). Composes `<kj-pagination>` for the\n * navigation row (First / Previous / Next / Last) and `<kj-select>` for the\n * page-size control, plus a \"Showing X–Y of Z\" `aria-live` summary.\n *\n * Index translation: `KjPagination` is 1-indexed (page 1..N) whereas\n * TanStack's `pageIndex` is 0-indexed. The component translates at the\n * boundary — `kjPage` bound to `pageIndex() + 1`, and `(kjPageChange)`\n * writes `next - 1` back to `setPageIndex`. `kjTotalPages` is clamped to a\n * minimum of `1` to satisfy the pagination directive's clamp invariant when\n * the dataset is empty (zero rows still yields one empty page).\n *\n * Project into a `<kj-table>` (or any element hosting the `KjTable`\n * directive) so the component can resolve the shared table state.\n *\n * @example\n * ```html\n * <kj-table [kjData]=\"rows()\" [kjColumns]=\"cols\">\n * <kj-table-pagination [kjPageSizes]=\"[10, 25, 50]\" />\n * </kj-table>\n * ```\n *\n * @doc-category Components/Data\n * @doc\n * @doc-name table-pagination\n * @doc-description Page-size selector, First/Prev/Next/Last nav, and \"Showing N–M of total\" summary bound to the parent table.\n */\n@Component({\n selector: 'kj-table-pagination',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n KjPaginationComponent,\n KjPaginationFirstComponent,\n KjPaginationPreviousComponent,\n KjPaginationNextComponent,\n KjPaginationLastComponent,\n KjSelectComponent,\n KjOptionComponent,\n ],\n host: {\n class: 'kj-table-pagination',\n '[attr.data-size]': \"kjSize() === 'md' ? null : kjSize()\",\n },\n styles: [`\n /* Three-column footer:\n [ page-size ] [ Showing N–M of T ] [ « ‹ — › » ]\n The nav row uses justify-content: space-between so the prev/next\n cluster doesn't bunch against the boundary buttons — the row reads\n as separate jump-to-edge and step-by-one controls. */\n .kj-table-pagination {\n display: flex;\n align-items: center;\n gap: var(--kj-space-md);\n padding: var(--kj-space-sm) var(--kj-space-md);\n border-top: 1px solid var(--kj-border-default);\n background: var(--kj-bg-surface);\n font-size: var(--kj-text-sm);\n color: var(--kj-fg-default);\n }\n .kj-table-pagination__page-size {\n display: inline-flex;\n align-items: center;\n gap: var(--kj-space-xs);\n color: var(--kj-fg-muted);\n white-space: nowrap;\n }\n .kj-table-pagination__summary {\n flex: 1 1 auto;\n text-align: center;\n color: var(--kj-fg-muted);\n white-space: nowrap;\n }\n /* The nav row carries the four boundary/step buttons. space-between\n splits them into two visual clusters — «‹ on one side, ›» on the\n other — when the row is given a fixed width. */\n .kj-table-pagination__nav {\n display: inline-flex;\n align-items: center;\n gap: var(--kj-space-xs);\n justify-content: space-between;\n min-width: 8rem;\n }\n `],\n template: `\n <div class=\"kj-table-pagination__page-size\">\n <span class=\"kj-table-pagination__page-size-label\">Rows per page</span>\n <kj-select\n class=\"kj-table-pagination__select\"\n [kjSize]=\"kjSize()\"\n [value]=\"pageSize()\"\n (valueChange)=\"onPageSizeChange($event)\"\n >\n @for (size of kjPageSizes(); track size) {\n <kj-option [value]=\"size\">{{ size }}</kj-option>\n }\n </kj-select>\n </div>\n\n @if (kjShowSummary()) {\n <span class=\"kj-table-pagination__summary\" aria-live=\"polite\">\n Showing {{ summary().start }}–{{ summary().end }} of {{ summary().total }}\n </span>\n }\n\n <kj-pagination\n class=\"kj-table-pagination__nav\"\n [kjSize]=\"kjSize()\"\n [kjPage]=\"page1Indexed()\"\n [kjTotalPages]=\"totalPages()\"\n (kjPageChange)=\"onPageChange($event)\"\n >\n <kj-pagination-first [kjSize]=\"kjSize()\">«</kj-pagination-first>\n <kj-pagination-previous [kjSize]=\"kjSize()\">‹</kj-pagination-previous>\n <kj-pagination-next [kjSize]=\"kjSize()\">›</kj-pagination-next>\n <kj-pagination-last [kjSize]=\"kjSize()\">»</kj-pagination-last>\n </kj-pagination>\n `,\n encapsulation: ViewEncapsulation.None,\n})\nexport class KjTablePaginationComponent {\n /** Available page sizes for the selector. */\n readonly kjPageSizes = input<readonly number[]>([10, 25, 50, 100]);\n /** Show the \"Showing N–M of total\" summary. Default `true`. */\n readonly kjShowSummary = input<boolean>(true);\n /** Size tier — matches the rest of the design system. `xs` for dense\n * footers, `lg` for touch-first. Forwarded to both the page-size select\n * and the nav buttons so the row stays visually consistent. */\n readonly kjSize = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n\n protected readonly tableCtx = inject(KJ_TABLE) as KjTable<unknown>;\n\n protected readonly pageSize = computed(() => this.tableCtx.state.pagination().pageSize);\n protected readonly pageIndex = computed(() => this.tableCtx.state.pagination().pageIndex);\n\n /** TanStack `pageIndex` (0-indexed) translated to `KjPagination`'s 1-indexed model. */\n protected readonly page1Indexed = computed(() => this.pageIndex() + 1);\n\n /**\n * Total pages reported by TanStack, clamped to a minimum of 1. The\n * pagination directive treats `kjTotalPages <= 0` as \"no pages\" and locks\n * `kjPage` to 1 — passing 1 here avoids the clamp on empty datasets.\n */\n protected readonly totalPages = computed(() =>\n Math.max(1, this.tableCtx.table().getPageCount()),\n );\n\n protected readonly summary = computed(() => {\n const t = this.tableCtx.table();\n const total = t.getRowCount();\n const size = this.pageSize();\n const idx = this.pageIndex();\n if (total === 0) return { start: 0, end: 0, total: 0 };\n const start = idx * size + 1;\n const end = Math.min(start + size - 1, total);\n return { start, end, total };\n });\n\n /** Receive 1-indexed page from `KjPagination` and translate to 0-indexed `setPageIndex`. */\n protected onPageChange(next1Indexed: number): void {\n const next = next1Indexed - 1;\n if (next === this.pageIndex()) return;\n this.tableCtx.table().setPageIndex(next);\n }\n\n protected onPageSizeChange(value: unknown): void {\n const next = Number(value);\n if (!Number.isFinite(next) || next === this.pageSize()) return;\n this.tableCtx.table().setPageSize(next);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { Column } from '@tanstack/angular-table';\nimport {\n DRAWER_DATA,\n KJ_TABLE,\n KjDrawer,\n KjDrawerRef,\n KjDrawerService,\n KjTable,\n} from '@kouji-ui/core';\n\n/**\n * Data injected into the side-panel content component via `DRAWER_DATA`.\n * Carries the parent `KjTable` instance (the side-panel is opened by a service\n * call so the content sees an injector that doesn't include the parent\n * `<table>`'s `KJ_TABLE` provider — we relay it explicitly here) plus the\n * header title resolved from the controller's `kjTitle` input.\n */\ninterface SidePanelData {\n readonly table: KjTable<unknown>;\n readonly title: string;\n}\n\n/**\n * Content of the column tool panel. Rendered inside `<kj-drawer>` by the\n * service-launched drawer. Receives the parent `KjTable` instance through\n * {@link DRAWER_DATA} (rather than via the standard `KJ_TABLE` token) because\n * the drawer's injector chain doesn't traverse the host component tree —\n * see `KjDrawerService.open` which creates the overlay under the environment\n * injector and re-provides only the drawer-scoped tokens.\n *\n * @internal\n */\n@Component({\n selector: 'kj-table-side-panel-content',\n standalone: true,\n imports: [KjDrawer],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <kj-drawer>\n <header class=\"kj-drawer-header\">\n <h2 class=\"kj-drawer-title\">{{ data.title }}</h2>\n </header>\n <div class=\"kj-drawer-body\" data-padded data-scroll>\n @for (col of leafColumns(); track col.id) {\n <div\n class=\"kj-table-side-panel-row\"\n [attr.aria-label]=\"'Column: ' + columnLabel(col)\"\n >\n <label class=\"kj-table-side-panel-vis\">\n <input\n type=\"checkbox\"\n [checked]=\"col.getIsVisible()\"\n (change)=\"onToggleVisible(col)\"\n [attr.aria-label]=\"'Show column ' + columnLabel(col)\"\n />\n <span>{{ columnLabel(col) }}</span>\n </label>\n <div class=\"kj-table-side-panel-actions\" role=\"group\"\n [attr.aria-label]=\"'Pin and group ' + columnLabel(col)\">\n <button\n type=\"button\"\n [attr.aria-pressed]=\"pinOf(col.id) === 'left'\"\n (click)=\"onPin(col.id, 'left')\"\n data-action=\"pin-left\"\n >Pin left</button>\n <button\n type=\"button\"\n [attr.aria-pressed]=\"pinOf(col.id) === false\"\n (click)=\"onPin(col.id, false)\"\n data-action=\"pin-none\"\n >Unpin</button>\n <button\n type=\"button\"\n [attr.aria-pressed]=\"pinOf(col.id) === 'right'\"\n (click)=\"onPin(col.id, 'right')\"\n data-action=\"pin-right\"\n >Pin right</button>\n <button\n type=\"button\"\n [attr.aria-pressed]=\"isGrouped(col.id)\"\n (click)=\"onToggleGroup(col.id)\"\n data-action=\"group\"\n >Group by</button>\n </div>\n </div>\n }\n </div>\n </kj-drawer>\n `,\n styles: [`\n @layer kj.component {\n .kj-table-side-panel-row {\n display: flex;\n align-items: center;\n gap: var(--kj-space-md);\n padding: var(--kj-space-xs) 0;\n }\n .kj-table-side-panel-vis {\n display: inline-flex;\n align-items: center;\n gap: var(--kj-space-xs);\n flex: 1;\n }\n .kj-table-side-panel-actions {\n display: inline-flex;\n gap: var(--kj-space-xs);\n }\n .kj-table-side-panel-actions button {\n min-height: 44px;\n min-width: 44px;\n padding: var(--kj-space-xs) var(--kj-space-sm);\n }\n }\n `],\n host: {\n '[attr.aria-label]': 'data.title',\n },\n})\nexport class KjTableSidePanelContent {\n protected readonly data = inject<SidePanelData>(DRAWER_DATA);\n\n /** All non-grouping leaf columns of the parent table. */\n protected readonly leafColumns = computed(() => {\n // Touch state signals so the computed re-runs when columns are hidden,\n // pinned, or grouped (TanStack's `getAllLeafColumns()` returns a fresh\n // view on each pass).\n this.data.table.state.columnVisibility();\n this.data.table.state.columnPinning();\n this.data.table.state.grouping();\n return this.data.table.table().getAllLeafColumns();\n });\n\n protected columnLabel(col: Column<unknown, unknown>): string {\n const h = col.columnDef.header;\n return typeof h === 'string' ? h : col.id;\n }\n\n protected pinOf(id: string): 'left' | 'right' | false {\n const p = this.data.table.state.columnPinning();\n if ((p.left ?? []).includes(id)) return 'left';\n if ((p.right ?? []).includes(id)) return 'right';\n return false;\n }\n\n protected isGrouped(id: string): boolean {\n return this.data.table.state.grouping().includes(id);\n }\n\n protected onToggleVisible(col: Column<unknown, unknown>): void {\n col.toggleVisibility();\n }\n\n protected onPin(id: string, side: 'left' | 'right' | false): void {\n const current = this.data.table.state.columnPinning();\n const left = (current.left ?? []).filter(c => c !== id);\n const right = (current.right ?? []).filter(c => c !== id);\n if (side === 'left') left.push(id);\n if (side === 'right') right.push(id);\n this.data.table.setState({ columnPinning: { left, right } });\n }\n\n protected onToggleGroup(id: string): void {\n const current = this.data.table.state.grouping();\n const next = current.includes(id)\n ? current.filter(c => c !== id)\n : [...current, id];\n this.data.table.setState({ grouping: next });\n }\n}\n\n/**\n * Column tool panel controller for `<kj-table>`. Two-way bound to\n * `kjOpen`; opens / closes a service-launched `kj-drawer` whose content lists\n * every leaf column with controls for visibility, pin position, and grouping.\n * The controller itself renders nothing — the drawer is portaled into the\n * shared overlay container so it gets focus trap, Escape handling, and\n * backdrop semantics for free.\n *\n * @example\n * ```html\n * <kj-table [kjData]=\"rows\" [kjColumns]=\"cols\">\n * <kj-table-side-panel [(kjOpen)]=\"open\" />\n * </kj-table>\n * ```\n *\n * @doc-category Components/Data\n * @doc\n * @doc-name table-side-panel\n * @doc-description Service-launched drawer listing every column with visibility, pin, and group controls.\n */\n@Component({\n selector: 'kj-table-side-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n template: ``,\n})\nexport class KjTableSidePanelComponent {\n /** Whether the side panel is visible. Two-way bindable. */\n readonly kjOpen = model(false);\n /** Drawer header text. */\n readonly kjTitle = input('Columns');\n\n private readonly tbl = inject<KjTable<unknown>>(KJ_TABLE);\n private readonly drawer = inject(KjDrawerService);\n private readonly destroyRef = inject(DestroyRef);\n private ref: KjDrawerRef<KjTableSidePanelContent> | null = null;\n\n constructor() {\n // Open / close the drawer in response to `kjOpen` changes. Untrack the\n // title so re-typing it doesn't re-open the drawer; the title is read at\n // open-time and projected into the content via `DRAWER_DATA`.\n effect(() => {\n const open = this.kjOpen();\n // The drawer service registers its own root effect to react to overlay\n // state — nesting effects throws NG0602. Wrap the side-effecting calls\n // in `untracked` so opening/closing the drawer doesn't run inside our\n // reactive context.\n untracked(() => {\n if (open && !this.ref) {\n this.openDrawer();\n } else if (!open && this.ref) {\n this.ref.close();\n this.ref = null;\n }\n });\n });\n }\n\n private openDrawer(): void {\n const data: SidePanelData = { table: this.tbl, title: this.kjTitle() };\n const ref = this.drawer.open<KjTableSidePanelContent, unknown, SidePanelData>(\n KjTableSidePanelContent,\n { side: 'right', data },\n );\n this.ref = ref;\n // Sync the two-way binding back when the drawer dismisses itself\n // (Escape, backdrop click, or programmatic close from inside the panel).\n ref.afterClosed$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.ref === ref) {\n this.ref = null;\n if (this.kjOpen()) this.kjOpen.set(false);\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { KJ_TABLE, KjTable } from '@kouji-ui/core';\n\n/**\n * Tiny counts strip rendered at the bottom of a data table. Displays\n * \"N rows • X selected • Filtered\" derived from the table instance state.\n *\n * Must be projected inside an element carrying `kjTable` so that the\n * `KJ_TABLE` context token resolves.\n *\n * @example\n * ```html\n * <table [kjTable]=\"cols\" [kjTableData]=\"rows\">\n * <!-- ...rows... -->\n * <kj-table-status-bar />\n * </table>\n * ```\n *\n * @doc-category Components/Data\n * @doc\n * @doc-name table-status-bar\n * @doc-description Counts strip showing row count, selected count, and filtered indicator.\n */\n@Component({\n selector: 'kj-table-status-bar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"status-bar\" role=\"status\" aria-live=\"polite\">\n <span>{{ rowCount() }} {{ rowCount() === 1 ? 'row' : 'rows' }}</span>\n @if (selectedCount() > 0) {\n <span class=\"sep\" aria-hidden=\"true\">•</span>\n <span>{{ selectedCount() }} selected</span>\n }\n @if (isFiltered()) {\n <span class=\"sep\" aria-hidden=\"true\">•</span>\n <span>Filtered</span>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n font-family: var(--kj-font-sans);\n font-size: var(--kj-text-xs);\n color: var(--kj-fg-muted);\n }\n .status-bar {\n display: flex;\n align-items: center;\n gap: var(--kj-base-space-xs);\n padding: var(--kj-base-space-xs) var(--kj-base-space-md);\n }\n .sep { opacity: 0.6; }\n `],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class KjTableStatusBarComponent {\n private readonly table = inject(KJ_TABLE) as unknown as KjTable<unknown>;\n\n protected readonly rowCount = computed(() => this.table.table().getRowCount());\n\n protected readonly selectedCount = computed(\n () => Object.values(this.table.state.rowSelection()).filter(Boolean).length,\n );\n\n protected readonly isFiltered = computed(\n () => this.table.state.globalFilter() !== '' || this.table.state.columnFilters().length > 0,\n );\n}\n","export interface ExportOptions<TRow = unknown> {\n rows: readonly TRow[];\n columns: readonly string[];\n getValue?: (row: TRow, column: string) => unknown;\n}\n\nfunction defaultGet<T>(row: T, column: string): unknown {\n return (row as Record<string, unknown>)[column];\n}\n\nfunction csvEscape(v: unknown): string {\n if (v == null) return '';\n const s = String(v);\n const needsQuotes = s.includes(',') || s.includes('\"') || s.includes('\\n');\n return needsQuotes ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n}\n\nexport function exportCsv<T>(opts: ExportOptions<T>): string {\n const get = opts.getValue ?? defaultGet;\n const header = opts.columns.join(',');\n const body = opts.rows.map(r =>\n opts.columns.map(c => csvEscape(get(r, c))).join(',')\n ).join('\\n');\n return `${header}\\n${body}`;\n}\n\nexport function exportJson<T>(opts: { rows: readonly T[]; pretty?: boolean }): string {\n return JSON.stringify(opts.rows, null, opts.pretty === false ? 0 : 2);\n}\n\nexport function toTsv<T>(opts: ExportOptions<T>): string {\n const get = opts.getValue ?? defaultGet;\n const header = opts.columns.join('\\t');\n const body = opts.rows.map(r =>\n opts.columns.map(c => String(get(r, c) ?? '')).join('\\t')\n ).join('\\n');\n return `${header}\\n${body}`;\n}\n\nexport function downloadString(filename: string, content: string, type = 'text/plain'): void {\n const blob = new Blob([content], { type });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\nexport async function copyToClipboard(text: string): Promise<void> {\n await navigator.clipboard.writeText(text);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n inject,\n input,\n} from '@angular/core';\nimport { KjTabs, KjTabList, KjTab, KjTabPanel } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjTabs` directive — root of the tabs\n * compound. Re-maps the `kjValue`/`kjOrientation`/`kjActivationMode` inputs to\n * terse public names and reflects them as `data-*` attributes for CSS chrome.\n *\n * Compose the four wrappers — `<kj-tabs>`, `<kj-tab-list>`, `<kj-tab>`,\n * `<kj-tab-panel>` — to mirror the four-directive shape. The wiring between\n * a tab and its panel is by string `value`, not by parent-child structure.\n *\n * @example\n * ```html\n * <kj-tabs [(value)]=\"active\">\n * <kj-tab-list>\n * <kj-tab value=\"overview\">Overview</kj-tab>\n * <kj-tab value=\"billing\">Billing</kj-tab>\n * </kj-tab-list>\n * <kj-tab-panel value=\"overview\">Overview content.</kj-tab-panel>\n * <kj-tab-panel value=\"billing\">Billing content.</kj-tab-panel>\n * </kj-tabs>\n * ```\n *\n * @doc-keyboard\n * ArrowRight|ArrowLeft — Moves focus between tabs when orientation is \"horizontal\" (off-axis arrows are swallowed)\n * ArrowDown|ArrowUp — Moves focus between tabs when orientation is \"vertical\"\n * Home — Moves focus to the first tab\n * End — Moves focus to the last tab\n * Enter|Space — Activates the focused tab (always honoured; required in `activationMode=\"manual\"`)\n * Delete — Fires `kjClose` when the tab has `kjClosable=\"true\"`\n * Tab — Single tab stop: leaves the tablist and moves to the active panel (roving tabindex)\n *\n * @doc-aria\n * role=\"tablist\" — on `<kj-tab-list>`\n * aria-orientation — reflects [orientation] (\"horizontal\" | \"vertical\")\n * role=\"tab\" — on each `<kj-tab>` host button\n * aria-selected — \"true\" on the active tab, \"false\" otherwise\n * aria-controls — links each tab to the id of its panel\n * aria-disabled — set to \"true\" when [disabled] is true on a tab\n * role=\"tabpanel\" — on each `<kj-tab-panel>`\n * aria-labelledby — links each panel to the id of its tab\n * hidden — set on inactive panels (toggled, not destroyed, after first mount)\n * data-state — \"active\" | \"inactive\" mirror for CSS targeting\n *\n * @doc-touch\n * Default tab padding produces a ~32–36px hit area. For touch-first layouts, increase tab padding to reach 44px or pair tabs with a larger pill variant — the WCAG 2.5.5 \"inline\" exception applies when tabs sit inside a horizontal navigation strip with labels.\n *\n * @doc-a11y\n * Implements the WAI-ARIA Tabs APG pattern. Roving tabindex via\n * `KjRovingTabindex` keeps the tablist as a single Tab stop; arrow keys move\n * focus among tabs. `activationMode=\"automatic\"` (default) activates the tab\n * as focus lands on it; `activationMode=\"manual\"` separates focus from\n * activation so screen reader users can browse tab labels before committing\n * to a panel. Panels use a lazy-then-persistent mount: content is created on\n * first activation and kept thereafter (only `hidden` toggles), preserving\n * form state and aria live regions across tab switches.\n *\n * @doc-related tab-list,segmented,stepper\n *\n * @doc-example Default\n * The default playground — three tabs, automatic activation, horizontal.\n * @doc-file tabs.example.ts\n * @doc-example Usage\n * A walkthrough of the most common tabs usages — controlled value, default\n * active, disabled tab, and a panel that reads from the active value.\n * @doc-file tabs.usage.example.ts\n * @doc-example Vertical\n * `[orientation]=\"'vertical'\"` stacks the tabs and panels side-by-side.\n * @doc-file tabs.vertical.example.ts\n * @doc-example Manual activation\n * `[activationMode]=\"'manual'\"` separates focus from activation — useful\n * for tabs that swap heavy content.\n * @doc-file tabs.manual-activation.example.ts\n * @doc-example Disabled tab\n * `[disabled]=\"true\"` on a `<kj-tab>` removes it from activation; arrow keys skip it.\n * @doc-file tabs.disabled.example.ts\n * @doc-example Controlled\n * Two-way bind `[(value)]` to drive activation from outside the strip.\n * @doc-file tabs.controlled.example.ts\n * @doc-category Library/Navigation\n * @doc\n * @doc-name tabs\n * @doc-description Themed tab strip with default and pill variants and manual or automatic activation.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-tabs',\n standalone: true,\n hostDirectives: [\n {\n directive: KjTabs,\n inputs: [\n 'kjValue: value',\n 'kjOrientation: orientation',\n 'kjActivationMode: activationMode',\n ],\n outputs: ['kjValueChange: valueChange'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './tabs.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-tabs',\n '[attr.data-variant]': 'variant()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTabsComponent {\n /** Visual chrome for the tab strip. Reflected as `data-variant` on the host. */\n readonly variant = input<'default' | 'pills'>('default');\n}\n\n/**\n * Styled wrapper around `KjTabList`. Hosts `role=\"tablist\"` (provided by the\n * underlying directive) and the roving-tabindex behaviour. Place inside a\n * `<kj-tabs>` and project `<kj-tab>` children.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name tabs\n */\n@Component({\n selector: 'kj-tab-list',\n standalone: true,\n hostDirectives: [KjTabList],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-tab-list' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTabListComponent {}\n\n/**\n * Styled wrapper around `KjTab`. Renders a `<button role=\"tab\">` and forwards\n * the required `value` and optional `disabled` inputs to the directive.\n * Project the tab's label as content.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name tabs\n */\n@Component({\n selector: 'kj-tab',\n standalone: true,\n imports: [KjTab],\n template: `\n <button\n type=\"button\"\n kjTab\n class=\"kj-tab\"\n [kjTabValue]=\"value()\"\n [kjTabDisabled]=\"disabled()\"\n >\n <ng-content />\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTabComponent {\n /** String key wiring this tab to the panel of the same `value`. */\n readonly value = input.required<string>();\n /** When true, the tab is announced as disabled and cannot be activated. */\n readonly disabled = input(false);\n}\n\n/**\n * Styled wrapper around `KjTabPanel`. Renders the panel host with\n * `role=\"tabpanel\"` and the lazy-then-persistent mount posture: projected\n * content is created on first activation and kept thereafter — subsequent\n * deactivations only toggle `hidden`.\n *\n * @doc-category Library/Navigation\n * @doc\n * @doc-name tabs\n */\n@Component({\n selector: 'kj-tab-panel',\n standalone: true,\n hostDirectives: [{ directive: KjTabPanel, inputs: ['kjPanelValue: value'] }],\n template: `\n @if (panel.mounted()) {\n <ng-content />\n }\n `,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-tab-panel' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTabPanelComponent {\n // Read the host directive instance from the element injector so the template\n // can gate `<ng-content>` on its `mounted()` signal — implements the\n // lazy-then-persistent mount posture without re-creating it here.\n protected readonly panel = inject(KjTabPanel);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from '@angular/core';\nimport { KjIconDirective, KjTag, KjTagList, KjTagRemove } from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `KjTag` directive. Renders the visual\n * chrome (rounded pill, density tokens, variant tones) and exposes the\n * directive's full input surface via `hostDirectives` aliasing — same\n * composition shape as `<kj-badge>`, with the interactive states (selectable,\n * removable, group-coordinated) layered on top.\n *\n * Compose `<kj-tag-remove>` for the removable shape and wrap chips in\n * `<kj-tag-list>` for group keyboard / ARIA. Interactivity is conveyed via\n * the directive's host-bound `role` / `tabindex` / `aria-pressed`, never by\n * swapping the tag name.\n *\n * @example\n * ```html\n * <kj-tag kjVariant=\"primary\">Acme</kj-tag>\n *\n * <kj-tag>\n * Acme\n * <kj-tag-remove>×</kj-tag-remove>\n * </kj-tag>\n *\n * <kj-tag kjTagSelectable [(kjTagSelected)]=\"on\">Filter</kj-tag>\n * ```\n * @doc-example Default\n * The default playground — a static decorative chip with `default` variant.\n * @doc-file tag.example.ts\n * @doc-example Usage\n * A walkthrough of the most common tag usages — decorative chip, removable\n * chip, selectable filter, and a tag list with arrow-key navigation.\n * @doc-file tag.usage.example.ts\n * @doc-example Variants\n * `default` / `secondary` / `success` / `warning` / `destructive` / `info` /\n * `outline` / `ghost`. Match the tone to the data.\n * @doc-file tag.variants.example.ts\n * @doc-example Sizes\n * `xs` / `sm` / `md` / `lg` — `md` is the default density.\n * @doc-file tag.sizes.example.ts\n * @doc-example Removable\n * Project `<kj-tag-remove>` for a trailing dismiss button; `(kjTagRemoved)`\n * fires when the user clicks it.\n * @doc-file tag.removable.example.ts\n * @doc-example Selectable\n * `kjTagSelectable` + `[(kjTagSelected)]` turns the tag into a toggle pill.\n * @doc-file tag.selectable.example.ts\n * @doc-example Tag list\n * Wrap chips in `<kj-tag-list>` for single-tab-stop + arrow-key navigation.\n * @doc-file tag.list.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Activates a selectable tag; flips `aria-pressed`\n * Delete — Fires `kjTagRemoved` when the tag is removable\n * ArrowKeys — Move focus between tags when wrapped in `<kj-tag-list>`\n * Tab — Tags participate in the tab order only when interactive\n *\n * @doc-aria\n * role — Set by the headless directive: \"button\" when selectable,\n * \"listitem\" inside a tag-list, otherwise none (decorative)\n * aria-pressed — Reflected on selectable tags\n * aria-disabled — Reflected when `[kjTagDisabled]=\"true\"`\n * aria-label — Auto-derived for the remove button as \"Remove {label}\"\n * data-variant — Mirrors the resolved variant for theme hooks\n * data-size — Mirrors the resolved size for theme hooks\n *\n * @doc-touch\n * `md` (default) and `lg` meet WCAG 2.5.5 for the interactive surface. Use\n * `xs` / `sm` only for purely decorative chips embedded in dense lists.\n *\n * @doc-a11y\n * Decorative tags carry no role — they read as plain text to AT. Selectable\n * tags adopt button semantics with `aria-pressed`. Removable tags expose a\n * real `<button>` for the dismiss action so it lands in the tab order with\n * the native focus ring.\n *\n * @doc-related badge,button-group,chip\n *\n * @doc-css-var\n * --kj-tag-bg — Background fill. Variant rules set this; override to brand-paint a one-off.\n * --kj-tag-fg — Foreground (label + icon) color. Resolved per variant.\n * --kj-tag-border-color — Border color. Outline variant sets this; others default to transparent.\n * --kj-tag-radius — Corner radius. Inherits --kj-radius-selector.\n * --kj-tag-padding-x — Horizontal padding. Sizes override.\n * --kj-tag-padding-y — Vertical padding. Sizes override.\n * --kj-tag-font-size — Font size. Sizes (xs/sm/md/lg) override.\n * --kj-tag-gap — Gap between label and trailing remove button.\n *\n * @doc-category Library/Data display\n * @doc\n * @doc-name tag\n * @doc-description Themed tag or chip with decorative, removable, and selectable variants for filters and labels.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-tag',\n standalone: true,\n // KjTag itself supplies KjVariant / KjSize / KjDisabled / KjFocusRing as\n // host directives + the `bindPresets(KJ_TAG_CONFIG)` providers. Composing\n // KjTag here cascades all of them onto the wrapper's host element.\n hostDirectives: [\n {\n directive: KjTag,\n inputs: [\n 'kjTagSelectable',\n 'kjTagSelected',\n 'kjTagLabel',\n 'kjTagDisabled',\n ],\n outputs: ['kjTagSelectedChange', 'kjTagRemoved'],\n },\n ],\n template: `<ng-content />`,\n styleUrl: './tag.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-tag',\n // The KjVariant / KjSize host directives nested inside KjTag set\n // [data-variant] / [data-size] on the same host element automatically.\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTagComponent {}\n\n/**\n * Trailing remove button for `<kj-tag>`. Composes the headless `KjTagRemove`\n * directive (which itself composes `KjButton` for native button semantics,\n * ARIA-disabled, and the focus ring). Auto-derives an\n * `aria-label=\"Remove {label}\"` from the parent tag's projected text;\n * override with `kjTagRemoveLabel`.\n * @doc\n * @doc-name tag\n */\n@Component({\n selector: 'kj-tag-remove',\n standalone: true,\n imports: [KjIconDirective],\n hostDirectives: [\n {\n directive: KjTagRemove,\n inputs: ['kjTagRemoveLabel'],\n },\n ],\n template: `<ng-content><i kjIcon=\"x\"></i></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-tag-remove',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTagRemoveComponent {}\n\n/**\n * Optional chip-group container. Provides the listbox / grid / group ARIA\n * wiring + roving tabindex via the headless `KjTagList` directive. Standalone\n * tags work without it; wrap chips in `<kj-tag-list>` whenever the group\n * needs a single tab stop and arrow-key navigation.\n * @doc\n * @doc-name tag\n */\n@Component({\n selector: 'kj-tag-list',\n standalone: true,\n hostDirectives: [\n {\n directive: KjTagList,\n inputs: [\n 'kjTagListRole',\n 'kjTagListOrientation',\n 'kjTagListMultiple',\n 'kjTagListDisabled',\n ],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-tag-list',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTagListComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n KjLiveRegion,\n KjTextarea,\n type KjTextareaAutoresize,\n type KjTextareaResize,\n} from '@kouji-ui/core';\n\nlet nextId = 0;\n\n/**\n * Number transform that preserves `undefined` (instead of NaN-ing on absent\n * numbers like Angular's built-in `numberAttribute`).\n *\n * @internal\n */\nfunction optionalNumber(v: number | string | undefined): number | undefined {\n if (v == null || v === '') return undefined;\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/**\n * Required-number transform: same shape, but returns the default when the\n * input is missing/invalid (used for `kjRows`).\n *\n * @internal\n */\nfunction numberWithDefault(def: number) {\n return (v: number | string | undefined): number => {\n const n = optionalNumber(v);\n return n ?? def;\n };\n}\n\n/**\n * Styled wrapper around the headless `KjTextarea` directive.\n *\n * Element-wrapper pattern: `<kj-textarea>` is a structural shell\n * (`display: contents;`); the inner `<textarea>` carries native textarea\n * semantics (focus, form integration, validation, native maxlength).\n *\n * Adds, on top of `KjTextarea`:\n * - A theme-token CSS shell (`.kj-textarea`).\n * - An optional visible character counter (`{ length } / { kjMaxLength }`)\n * wired to a polite live region for screen-reader announcements at\n * threshold crossings (≤ 20, ≤ 10, 0 remaining).\n * - `aria-describedby` plumbing from the textarea to the counter element.\n *\n * @example\n * ```html\n * <kj-textarea kjRows=\"4\" [(ngModel)]=\"bio\" kjPlaceholder=\"Tell us about yourself\" />\n *\n * <kj-textarea kjAutoresize=\"auto\" [kjMinRows]=\"2\" [kjMaxRows]=\"8\"\n * [(ngModel)]=\"bio\" />\n *\n * <kj-textarea [kjMaxLength]=\"200\" kjShowCounter [(ngModel)]=\"bio\" />\n * ```\n *\n * @doc-example Default\n * The default playground — a 4-row textarea with placeholder.\n * @doc-file textarea.example.ts\n * @doc-example Usage\n * A walkthrough of the most common textarea usages — `[(ngModel)]`,\n * placeholder, character counter, and an invalid state with a helper note.\n * @doc-file textarea.usage.example.ts\n * @doc-example Auto-resize\n * `kjAutoresize=\"auto\"` grows the textarea to fit content between\n * `kjMinRows` and `kjMaxRows`.\n * @doc-file textarea.autoresize.example.ts\n * @doc-example Character counter\n * `[kjMaxLength]` + `kjShowCounter` renders a live `n / max` counter wired\n * to a polite live region.\n * @doc-file textarea.character-count.example.ts\n * @doc-example No resize handle\n * `kjResize=\"none\"` hides the native drag-to-resize affordance.\n * @doc-file textarea.no-resize.example.ts\n * @doc-example With Field wrapper\n * Compose under `<kj-field>` for label / error / hint association.\n * @doc-file textarea.with-field.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus into the textarea\n * Shift+Tab — Moves focus to the previous focusable element\n * Enter — Inserts a newline (native textarea behaviour)\n * Cmd/Ctrl+A — Selects all (native)\n *\n * @doc-aria\n * aria-disabled — Reflected when `[kjDisabled]=\"true\"`\n * aria-invalid — Reflected when `[kjInvalid]=\"true\"`\n * aria-describedby — Wired to the counter id when the counter is visible\n * role=\"status\" — Internal live region announces threshold crossings\n * data-variant — Mirrors the resolved variant for theme hooks\n * data-size — Mirrors the resolved size for theme hooks\n *\n * @doc-touch\n * Default `--kj-textarea-min-height` is the WCAG 2.5.5 touch-target floor\n * (≥ 44×44). `sm` density retains the floor — only padding shrinks.\n *\n * @doc-a11y\n * Renders a real `<textarea>` so native focus, form integration, validation,\n * and `maxlength` all work without ceremony. The character counter is wired\n * via `aria-describedby` plus a polite live region that announces at 20 / 10\n * / 0 remaining, never interrupting the typist.\n *\n * @doc-related input,field,form\n *\n * @doc-css-var\n * --kj-textarea-bg — Background fill. Filled variant retargets to --kj-bg-surface.\n * --kj-textarea-fg — Foreground (text) color.\n * --kj-textarea-border-color — Border color. Focus and invalid states retarget this.\n * --kj-textarea-border-style — Border style. Default solid.\n * --kj-textarea-border-width — Border thickness. Inherits the theme's --kj-border.\n * --kj-textarea-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-textarea-padding-x — Horizontal padding. Sizes override.\n * --kj-textarea-padding-y — Vertical padding. Sizes override.\n * --kj-textarea-font — Font family. Defaults to --kj-font-sans.\n * --kj-textarea-font-size — Font size. Sizes (sm/md/lg) override.\n * --kj-textarea-line-height — Line height for the text content.\n * --kj-textarea-placeholder-fg — Foreground color of the placeholder text.\n * --kj-textarea-min-height — Minimum height. Defaults to the WCAG 2.5.5 touch-target floor.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name textarea\n * @doc-description Themed multi-line text input with optional auto-resize and live character counter.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-textarea',\n standalone: true,\n imports: [KjTextarea, KjLiveRegion],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KjTextareaComponent),\n multi: true,\n },\n ],\n template: `\n <textarea\n kjTextarea\n class=\"kj-textarea\"\n [rows]=\"kjRows()\"\n [value]=\"currentValue()\"\n [placeholder]=\"kjPlaceholder()\"\n [kjVariant]=\"kjVariant()\"\n [kjSize]=\"kjSize()\"\n [kjInvalid]=\"kjInvalid()\"\n [kjDisabled]=\"kjDisabled() || cvaDisabled()\"\n [kjResize]=\"kjResize()\"\n [kjAutoresize]=\"kjAutoresize()\"\n [kjMinRows]=\"kjMinRows()\"\n [kjMaxRows]=\"kjMaxRows()\"\n [kjMaxLength]=\"kjMaxLength()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n (input)=\"onInnerInput($any($event.target).value)\"\n (blur)=\"onInnerBlur()\"\n ></textarea>\n @if (showCounter()) {\n <div\n class=\"kj-textarea__counter\"\n [id]=\"counterId\"\n [attr.data-state]=\"counterState()\"\n >{{ valueLength() }} / {{ kjMaxLength() }}</div>\n <div\n class=\"kj-textarea__live\"\n kjLiveRegion\n kjPoliteness=\"polite\"\n >{{ liveMessage() }}</div>\n }\n `,\n styleUrl: './textarea.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: contents;',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTextareaComponent implements ControlValueAccessor {\n /** Uncontrolled fallback value. Templated forms use `[(ngModel)]` / `[formControl]`. */\n readonly kjValue = input<string>('');\n\n /** Native `placeholder` attribute. */\n readonly kjPlaceholder = input<string>('');\n\n /** Native `rows` attribute. Default `3`. */\n readonly kjRows = input<number, number | string | undefined>(3, {\n transform: numberWithDefault(3),\n });\n\n /** CSS `resize` override. Forced to `none` when `kjAutoresize === 'auto'`. */\n readonly kjResize = input<KjTextareaResize>('vertical');\n\n /** Auto-resize mode. `'auto'` measures `scrollHeight` on each input. */\n readonly kjAutoresize = input<KjTextareaAutoresize>('off');\n\n /** Minimum rows when auto-resize is on. */\n readonly kjMinRows = input<number, number | string | undefined>(0, {\n transform: numberWithDefault(0),\n });\n\n /** Maximum rows when auto-resize is on. */\n readonly kjMaxRows = input<number, number | string | undefined>(Number.POSITIVE_INFINITY, {\n transform: numberWithDefault(Number.POSITIVE_INFINITY),\n });\n\n /** Native `maxlength`. Required to enable the visible counter. */\n readonly kjMaxLength = input<number, number | string | undefined>(Number.POSITIVE_INFINITY, {\n transform: numberWithDefault(Number.POSITIVE_INFINITY),\n });\n\n /** Renders a visible `{ length } / { kjMaxLength }` counter. Requires `kjMaxLength`. */\n readonly kjShowCounter = input(false, { transform: booleanAttribute });\n\n /** Whether the textarea is invalid. Combined with `touched` for ARIA. */\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n /** Disables the textarea. Reflects `aria-disabled` and native `disabled`. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Theme variant. Configurable via `provideKjTextarea(...)`. */\n readonly kjVariant = input('outlined');\n\n /** Theme size. Configurable via `provideKjTextarea(...)`. */\n readonly kjSize = input('md');\n\n /** @internal stable id for the counter / aria-describedby wiring. */\n protected readonly counterId = `kj-textarea-counter-${++nextId}`;\n\n // ── CVA plumbing ───────────────────────────────────────────────────────\n // The wrapper itself acts as the form-control bound to `<kj-textarea>` so\n // consumers can write `[(ngModel)]=\"bio\"` / `[formControl]=\"bio\"` on the\n // wrapper element. The inner `[kjTextarea]` directive's own KjFormControl is\n // a local signal channel that powers value reflection + the counter; both\n // are kept in sync via the (input) handler.\n private readonly cvaValue = signal<string>('');\n protected readonly cvaDisabled = signal<boolean>(false);\n\n /** @internal Effective textarea value: CVA-bound value with kjValue fallback. */\n protected readonly currentValue = computed(() => {\n const v = this.cvaValue();\n return v !== '' && v != null ? v : this.kjValue();\n });\n\n private _onChange?: (value: string) => void;\n private _onTouched?: () => void;\n\n /** @internal Whether the visible counter element should render. */\n protected readonly showCounter = computed(\n () => this.kjShowCounter() && Number.isFinite(this.kjMaxLength()),\n );\n\n /** @internal — value length, prioritised from the CVA-bound signal so the\n * counter updates the same tick the form control writes. */\n protected readonly valueLength = computed(() => {\n const cva = this.cvaValue();\n if (cva) return cva.length;\n return (this.kjValue() ?? '').length;\n });\n\n /** @internal — counter state for theming (`ok` / `warn` / `limit`). */\n protected readonly counterState = computed(() => {\n const max = this.kjMaxLength();\n if (!Number.isFinite(max)) return 'ok';\n const remaining = max - this.valueLength();\n if (remaining <= 0) return 'limit';\n if (remaining <= 20) return 'warn';\n return 'ok';\n });\n\n /** @internal — composed aria-describedby (counter id when visible). */\n protected readonly ariaDescribedBy = computed(() =>\n this.showCounter() ? this.counterId : null,\n );\n\n /** @internal — threshold-based announcement string (mirrors the directive's\n * own logic so the wrapper doesn't need a viewChild handle to read it). */\n protected readonly liveMessage = computed<string>(() => {\n const max = this.kjMaxLength();\n if (!Number.isFinite(max)) return '';\n const r = max - this.valueLength();\n if (r === 0) return 'Character limit reached';\n if (r === 10) return '10 characters remaining';\n if (r === 20) return '20 characters remaining';\n return '';\n });\n\n constructor() {\n // Dev-mode guidance: counter requested without max length is a no-op.\n effect(() => {\n if (this.kjShowCounter() && !Number.isFinite(this.kjMaxLength()) && typeof console !== 'undefined') {\n console.warn(\n '[kj-textarea] kjShowCounter is set without kjMaxLength — counter will not render.',\n );\n }\n });\n }\n\n /** @internal — host (input) wired into the wrapper's CVA. */\n onInnerInput(value: string): void {\n this.cvaValue.set(value);\n this._onChange?.(value);\n }\n\n /** @internal — host (blur) marks CVA touched. */\n onInnerBlur(): void {\n this._onTouched?.();\n }\n\n // ── ControlValueAccessor implementation ────────────────────────────────\n writeValue(val: unknown): void {\n const next = val == null ? '' : String(val);\n this.cvaValue.set(next);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n model,\n numberAttribute,\n} from '@angular/core';\nimport {\n KjHourCycle,\n KjTimePicker,\n KjTimePickerHours,\n KjTimePickerMeridiem,\n KjTimePickerMinutes,\n KjTimePickerSeconds,\n TimeParts,\n} from '@kouji-ui/core';\n\n/**\n * Styled wrapper around the headless `[kjTimePicker]` directive family. Renders\n * an internal HH : MM (: SS) row of segmented spinbuttons plus an AM/PM toggle\n * when 12-hour mode is active.\n *\n * Accepts and emits either `Date` (default) or `'HH:mm[:ss]'` strings via\n * `kjValueShape`. Per-segment ARIA wiring (`spinbutton`,\n * `aria-valuemin / max / now / text`) is forwarded by the headless directives.\n *\n * @doc-example Default (24-hour)\n * The default playground — HH : MM spinbuttons, 24-hour cycle.\n * @doc-file time-picker.example.ts\n * @doc-example Usage\n * A walkthrough of the most common time-picker usages — 24-hour, 12-hour\n * with AM/PM, and a formatted string output bound to `[(kjValue)]`.\n * @doc-file time-picker.usage.example.ts\n * @doc-example 12-hour with AM/PM\n * `[kj12Hour]=\"true\"` renders an AM/PM toggle next to the segments.\n * @doc-file time-picker.12-hour.example.ts\n * @doc-example With seconds\n * `kjShowSeconds` adds an HH : MM : SS spinbutton triple.\n * @doc-file time-picker.with-seconds.example.ts\n * @doc-example Range (start / end)\n * Two pickers wired with `[kjMin]` / `[kjMax]` so end can't precede start.\n * @doc-file time-picker.range.example.ts\n * @doc-example Formatted string output\n * `kjValueShape=\"string\"` emits `'HH:mm[:ss]'` strings instead of `Date`.\n * @doc-file time-picker.formatted.example.ts\n *\n * @doc-keyboard\n * ArrowUp|ArrowDown — Steps the focused segment up/down by its step value\n * ArrowLeft|ArrowRight — Moves focus between segments (HH ↔ MM ↔ SS ↔ AM/PM)\n * Home — Sets the focused segment to its minimum\n * End — Sets the focused segment to its maximum\n * PageUp|PageDown — Coarse step (10×) on the focused segment\n * 0-9 — Type-ahead entry on the focused segment\n * Enter|Space — Toggles AM/PM when focused on the meridiem button\n *\n * @doc-aria\n * role=\"group\" — applied to the host wrapping the segments\n * role=\"spinbutton\" — set on each HH / MM / SS input by the headless directive\n * aria-valuemin / max / now / text — wired per segment for AT announcement\n * aria-label — `kjAriaLabel` on the wrapper; per-segment labels via\n * `kjHoursLabel` / `kjMinutesLabel` / `kjSecondsLabel`\n * aria-disabled — Reflected when `[kjDisabled]=\"true\"`\n * data-disabled — Mirrors disabled state for CSS hooks\n *\n * @doc-touch\n * Each segment ships with the `md` density floor (≥ 44×44 via padding).\n * The meridiem toggle inherits the same surface. `sm` keeps the floor —\n * only horizontal padding shrinks.\n *\n * @doc-a11y\n * Each segment is a real ARIA `spinbutton` so AT reads the current value,\n * range, and step. Min/max gating is enforced at the directive layer — the\n * picker never reports an out-of-range value through `(kjValueChange)`.\n *\n * @doc-related date-picker,number-input,form\n *\n * @doc-css-var\n * --kj-time-picker-bg — Background fill of the segment row.\n * --kj-time-picker-fg — Foreground (text) color of the segments.\n * --kj-time-picker-border-color — Border color of the segment row.\n * --kj-time-picker-border-width — Border thickness. Inherits --kj-border.\n * --kj-time-picker-radius — Corner radius. Inherits --kj-radius-field.\n * --kj-time-picker-padding-x — Horizontal padding of the segment row.\n * --kj-time-picker-font — Font family. Defaults to --kj-font-sans.\n * --kj-time-picker-font-size — Font size. Sizes (sm/md/lg) override.\n * --kj-time-picker-segment-width — Fixed width of each HH/MM/SS spinbutton.\n * --kj-time-picker-height — Row height. Sizes override.\n * --kj-time-picker-meridiem-bg — Background of the AM/PM toggle button.\n * --kj-time-picker-meridiem-fg — Foreground of the AM/PM toggle button.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name time-picker\n * @doc-description Themed time entry with HH MM SS spinbuttons, optional AM/PM, and `Date` or string output.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-time-picker',\n standalone: true,\n imports: [\n KjTimePicker,\n KjTimePickerHours,\n KjTimePickerMinutes,\n KjTimePickerSeconds,\n KjTimePickerMeridiem,\n ],\n template: `\n <div\n kjTimePicker\n class=\"kj-time-picker\"\n [kjValue]=\"kjValue() ?? null!\"\n (kjValueChange)=\"kjValue.set($event)\"\n [kjValueShape]=\"kjValueShape()\"\n [kj12Hour]=\"kj12Hour()\"\n [kjHourCycle]=\"kjHourCycle()\"\n [kjShowSeconds]=\"kjShowSeconds()\"\n [kjStep]=\"kjStep()\"\n [kjHourStep]=\"kjHourStep()\"\n [kjMinuteStep]=\"kjMinuteStep()\"\n [kjSecondStep]=\"kjSecondStep()\"\n [kjMin]=\"kjMin() ?? null!\"\n [kjMax]=\"kjMax() ?? null!\"\n [kjReadonly]=\"kjReadonly()\"\n [kjDisabled]=\"kjDisabled()\"\n [kjInvalid]=\"kjInvalid()\"\n [kjLocale]=\"kjLocale()\"\n [kjReferenceDate]=\"kjReferenceDate() ?? null!\"\n [attr.data-disabled]=\"kjDisabled() ? '' : null\"\n [attr.aria-label]=\"kjAriaLabel()\"\n >\n <input\n kjTimePickerHours\n class=\"kj-time-picker__segment kj-time-picker__hours\"\n [kjAriaLabel]=\"kjHoursLabel()\"\n />\n <span class=\"kj-time-picker__separator\" aria-hidden=\"true\">:</span>\n <input\n kjTimePickerMinutes\n class=\"kj-time-picker__segment kj-time-picker__minutes\"\n [kjAriaLabel]=\"kjMinutesLabel()\"\n />\n @if (kjShowSeconds()) {\n <span class=\"kj-time-picker__separator\" aria-hidden=\"true\">:</span>\n <input\n kjTimePickerSeconds\n class=\"kj-time-picker__segment kj-time-picker__seconds\"\n [kjAriaLabel]=\"kjSecondsLabel()\"\n />\n }\n @if (showMeridiem()) {\n <button\n type=\"button\"\n kjTimePickerMeridiem\n class=\"kj-time-picker__meridiem\"\n [attr.aria-label]=\"kjMeridiemLabel()\"\n [kjAriaLabel]=\"kjMeridiemLabel()\"\n ></button>\n }\n </div>\n `,\n styleUrl: './time-picker.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTimePickerComponent {\n /** Two-way bindable time value. `null` clears. */\n readonly kjValue = model<Date | string | null>(null);\n\n readonly kjValueShape = input<'date' | 'string'>('date');\n readonly kj12Hour = input(false, { transform: booleanAttribute });\n readonly kjHourCycle = input<KjHourCycle | 'auto'>('auto');\n readonly kjShowSeconds = input(false, { transform: booleanAttribute });\n\n readonly kjStep = input<number, unknown>(1, { transform: numberAttribute });\n readonly kjHourStep = input<number, unknown>(1, { transform: numberAttribute });\n readonly kjMinuteStep = input<number | undefined, unknown>(undefined, {\n transform: (v: unknown) => (v === undefined || v === null || v === '' ? undefined : numberAttribute(v)),\n });\n readonly kjSecondStep = input<number, unknown>(1, { transform: numberAttribute });\n\n readonly kjMin = input<Date | string | TimeParts | null>(null);\n readonly kjMax = input<Date | string | TimeParts | null>(null);\n\n readonly kjReadonly = input(false, { transform: booleanAttribute });\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n readonly kjLocale = input<string>('');\n readonly kjReferenceDate = input<Date | undefined>(undefined);\n\n readonly kjAriaLabel = input<string>('');\n readonly kjHoursLabel = input<string>('Hours');\n readonly kjMinutesLabel = input<string>('Minutes');\n readonly kjSecondsLabel = input<string>('Seconds');\n readonly kjMeridiemLabel = input<string>('Toggle AM/PM');\n\n /** Whether the meridiem toggle should be rendered. */\n protected readonly showMeridiem = computed(() => {\n if (this.kj12Hour()) return true;\n const cycle = this.kjHourCycle();\n return cycle === 'h11' || cycle === 'h12';\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n input,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { KjToastViewport, KjToast, KjToastClose } from '@kouji-ui/core';\nimport type { KjToastVariant } from '@kouji-ui/core';\n\n/**\n * Toast suite shell. Hosts the documentation page for the toast service +\n * viewport + close button trio. Use `KjToastService.show()` to enqueue a\n * toast, mount `<kj-toast-viewport>` near your trigger, and place\n * `<kj-toast>` / `<kj-toast-close>` inside the per-call `<ng-template>`.\n *\n * @doc\n * @doc-name toast\n * @doc-is-main\n * @doc-example Default\n * The default playground — enqueue a single toast from a button click.\n * @doc-file toast.default.example.ts\n * @doc-example Usage\n * A walkthrough of the most common toast usages — variants, an action\n * button inside the body, and dismissal via `KjToastService.dismiss(id)`.\n * @doc-file toast.usage.example.ts\n * @doc-example Variants\n * `default` / `success` / `warning` / `error` / `info` — themed per tone.\n * @doc-file toast.variants.example.ts\n * @doc-example With action\n * Project a secondary `<kj-button>` inside the template to offer an action.\n * @doc-file toast.with-action.example.ts\n * @doc-example Dismissible\n * `<kj-toast-close>` calls the service's `dismiss(id)` for the current toast.\n * @doc-file toast.dismissible.example.ts\n *\n * @doc-keyboard\n * F6 — Moves focus into the toast viewport (when the host app wires it)\n * Enter|Space — Activates the focused action / close button inside a toast\n * Tab — Cycles through the dismiss + action buttons inside a toast\n * Escape — Optional — apps can wire to `dismiss(id)` on the active toast\n *\n * @doc-aria\n * role=\"region\" — applied to `<kj-toast-viewport>` with `aria-label=\"Notifications\"`\n * role=\"status\" — applied to each toast (non-blocking polite announce)\n * aria-live — \"polite\" for default; \"assertive\" for error variants\n * aria-label — Defaults to \"Dismiss notification\" on `<kj-toast-close>`\n * data-variant — Mirrors the toast variant for theme hooks\n *\n * @doc-touch\n * The dismiss button defaults to a 32px hit area at `md` density — wrap\n * icon-only close buttons with extra padding or label text to reach the\n * WCAG 2.5.5 floor on touch-first surfaces.\n *\n * @doc-a11y\n * Implements the toast pattern from ARIA APG. Each toast is a polite live\n * region so AT users hear the title without losing their place. Error /\n * warning variants escalate to `aria-live=\"assertive\"` per theme. Focus is\n * never stolen — the user keeps typing while toasts arrive in the viewport.\n *\n * @doc-related dialog,alert,spinner\n *\n * @doc-css-var\n * --kj-toast-z-index — Stack level for the viewport. Default 1000; raise above app overlays.\n * --kj-toast-gap — Vertical gap between stacked toasts in both collapsed and expanded states.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-toast-wrapper',\n standalone: true,\n template: `<ng-content />`,\n styleUrl: './toast.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjToastWrapperComponent {}\n\n/**\n * Toast viewport. Mount once near your trigger button (or in your app shell).\n * Renders each active toast using the per-call template passed to\n * `KjToastService.show(template, options)`.\n */\n@Component({\n selector: 'kj-toast-viewport',\n standalone: true,\n imports: [KjToastViewport, NgTemplateOutlet],\n template: `\n <ol\n kjToastViewport\n class=\"kj-toast-viewport\"\n #vp=\"kjToastViewport\"\n aria-label=\"Notifications\"\n >\n @for (r of vp.renderable(); track r.id) {\n <li>\n <ng-container *ngTemplateOutlet=\"r.template; context: r.context\" />\n </li>\n }\n </ol>\n `,\n styleUrl: './toast.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjToastViewportComponent {}\n\n/**\n * Single toast item. Bind `[variant]` from `ctx.variant` and `[id]` from `ctx.id`.\n * Place inside the `<ng-template let-ctx>` you pass to `KjToastService.show()`.\n */\n@Component({\n selector: 'kj-toast',\n standalone: true,\n imports: [KjToast],\n template: `\n <div\n kjToast\n class=\"kj-toast\"\n [kjToastVariant]=\"variant()\"\n [kjToastId]=\"id()\"\n ><ng-content /></div>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjToastComponent {\n readonly variant = input<KjToastVariant>('default');\n readonly id = input<string>('');\n}\n\n/**\n * Dismiss button for a toast. Bind `[toastId]` from `ctx.id`. Clicking calls\n * `KjToastService.dismiss(id)`.\n *\n * The rendered `<button>` carries a default `aria-label=\"Dismiss notification\"`\n * so icon-only close buttons remain accessible (WCAG 4.1.2). Override via the\n * `ariaLabel` input or by projecting visible text.\n */\n@Component({\n selector: 'kj-toast-close',\n standalone: true,\n imports: [KjToastClose],\n template: `<button\n type=\"button\"\n [kjToastClose]=\"toastId()\"\n [attr.aria-label]=\"ariaLabel()\"\n class=\"kj-toast-close\"\n ><ng-content /></button>`,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjToastCloseComponent {\n /** The id of the toast to dismiss — bind from `ctx.id` in your template context. */\n readonly toastId = input.required<string>();\n\n /**\n * Accessible name for the close button. Defaults to `\"Dismiss notification\"`\n * so icon-only close affordances satisfy WCAG 4.1.2 (Name, Role, Value)\n * without consumer ceremony. Override per-instance when the toast already\n * names its dismiss action elsewhere.\n */\n readonly ariaLabel = input<string>('Dismiss notification');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport {\n KjTooltipTrigger,\n KjTooltipContent,\n KjTooltipArrow,\n KjTooltipGroup,\n} from '@kouji-ui/core';\n\nexport {\n KjTooltipTrigger,\n KjTooltipContent,\n KjTooltipArrow,\n KjTooltipGroup,\n} from '@kouji-ui/core';\n\n/**\n * Tooltip surface styles: `tooltip.css` in this folder. Apps that compose\n * `KjTooltipTrigger` + `kj-tooltip-content` from `@kouji-ui/core` (without this\n * wrapper) must load `packages/components/src/tooltip/tooltip.css` globally\n * (see docs `angular.json` styles) so `.kj-tooltip-content[hidden]{display:none}`\n * and theme tokens apply — same contract as the finance tooltip example.\n *\n * Hover/focus tooltip. Compose `[kjTooltipTrigger]` + `<kj-tooltip-content [kjFor]=\"t\">`\n * for declarative use. The wrapper itself renders only projected content — its\n * purpose is to host the documentation tags for the tooltip suite.\n *\n * @doc\n * @doc-name tooltip\n * @doc-description Themed hover and focus tooltip with placement, delay, group, and rich-content options.\n * @doc-is-main\n * @doc-example Default\n * The default playground — a trigger and tooltip wired by template ref.\n * @doc-file tooltip.example.ts\n * @doc-example Usage\n * A walkthrough of the most common tooltip usages — placement, custom delay,\n * and a small rich body with secondary info.\n * @doc-file tooltip.usage.example.ts\n * @doc-example Sides\n * `kjSide` placement — `top` / `right` / `bottom` / `left`.\n * @doc-file tooltip.sides.example.ts\n * @doc-example Delays\n * `[kjOpenDelay]` / `[kjCloseDelay]` tune the hover-intent thresholds.\n * @doc-file tooltip.delays.example.ts\n * @doc-example Rich content\n * Project structured content with a heading + body inside the tooltip.\n * @doc-file tooltip.rich.example.ts\n * @doc-example Disabled\n * `[kjDisabled]=\"true\"` on the trigger suppresses the tooltip entirely.\n * @doc-file tooltip.disabled.example.ts\n * @doc-example Grouped\n * `<kj-tooltip-group>` shares the open delay across nearby triggers, so the\n * second one opens instantly after the first.\n * @doc-file tooltip.group.example.ts\n *\n * @doc-keyboard\n * Tab — Moves focus onto the trigger; opens the tooltip (no delay on focus)\n * Escape — Closes the open tooltip without losing trigger focus\n * Shift+Tab — Moves focus away; closes the tooltip\n *\n * @doc-aria\n * role=\"tooltip\" — applied to `<kj-tooltip-content>` by the directive\n * aria-describedby — wired from the trigger to the content's id while open\n * data-state — \"open\" | \"closed\" mirror for CSS targeting on the content\n * data-side — Mirrors the resolved placement for theme/arrow hooks\n *\n * @doc-touch\n * Tooltips are pointer/keyboard-only by contract — touch shouldn't depend\n * on hover for information. Pair the trigger with a visible label or use\n * Popover instead when the content is essential on touch.\n *\n * @doc-a11y\n * Implements the WAI-ARIA Tooltip APG pattern via `aria-describedby` on the\n * trigger. Hover-intent timing prevents flicker on quick mouse movement.\n * Escape closes the tooltip per APG. Never put interactive controls inside\n * the tooltip — use Popover for that.\n *\n * @doc-related popover,dropdown-menu,kbd\n *\n * @doc-css-var\n * --kj-tooltip-bg — Background fill of the content panel and arrow.\n * --kj-tooltip-fg — Foreground (text) color of the content panel.\n * --kj-tooltip-border-color — Border color of the content panel. Default transparent.\n * --kj-tooltip-radius — Corner radius. Inherits --kj-radius-selector.\n * --kj-tooltip-padding-x — Horizontal padding of the content panel.\n * --kj-tooltip-padding-y — Vertical padding of the content panel.\n * --kj-tooltip-font-size — Font size of the content text.\n * --kj-tooltip-shadow — Elevation shadow on the content panel.\n * --kj-tooltip-arrow-size — Edge length of the diamond arrow. Default 6px.\n *\n * @doc-category Library/Overlay\n */\n@Component({\n selector: 'kj-tooltip',\n standalone: true,\n imports: [KjTooltipTrigger, KjTooltipContent, KjTooltipArrow, KjTooltipGroup],\n template: `<ng-content />`,\n styleUrl: './tooltip.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTooltipComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n KjCascadeSelect,\n KjCascadeSelectOption,\n KjCascadeSelectPanel,\n KjCascadeSelectSubPanel,\n KjCascadeSelectTrigger,\n KjIconDirective,\n} from '@kouji-ui/core';\n\n/**\n * Cascade-select root wrapper. Renders a trigger button + caret, the root\n * panel, and projects sub-tree options supplied by the consumer.\n *\n * Bind the selected leaf value via `[(kjValue)]`. Listen for the full path\n * via `(kjCascadePathChange)`.\n *\n * @doc-example Default\n * The default playground — three-level country/state/city tree.\n * @doc-file cascade-select.example.ts\n * @doc-example Usage\n * The common shape — controlled leaf value with a path listener. Use this as\n * the copy-paste starting point.\n * @doc-file cascade-select.usage.example.ts\n * @doc-example Data-driven\n * Build the option tree from a `TreeNode[]` source so it can be hydrated\n * from an API response.\n * @doc-file cascade-select.data-driven.example.ts\n * @doc-example Path output\n * Bind `[(kjCascadePath)]` to mirror the full ancestor chain into the form.\n * @doc-file cascade-select.path.example.ts\n * @doc-example In a field\n * Wraps the trigger in `<kj-field>` for label / hint / error wiring.\n * @doc-file cascade-select.field.example.ts\n * @doc-example Disabled options\n * Mark an option `disabled` to skip it in navigation and prevent selection.\n * @doc-file cascade-select.disabled.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Opens the panel from the trigger; activates the focused option\n * ArrowDown — Moves focus to the next option in the current panel\n * ArrowUp — Moves focus to the previous option in the current panel\n * ArrowRight — Opens a branch option's sub-panel\n * ArrowLeft — Closes the current sub-panel and returns focus to its owner\n * Home|End — Jumps to the first / last option in the current panel\n * Escape — Closes all panels and returns focus to the trigger\n *\n * @doc-aria\n * role — `combobox` on the trigger; each panel is `listbox`; options are `option`\n * aria-haspopup — `\"listbox\"` on the trigger\n * aria-expanded — Reflected on the trigger; flips with the panel open state\n * aria-controls — Trigger references the root panel id\n * aria-activedescendant — Trigger references the currently-focused option id\n * aria-disabled — Reflected on disabled options\n *\n * @doc-touch\n * The trigger inherits `<kj-button>` sizing — default `md` is ≥ 36px tall;\n * bump to `lg` for touch-first surfaces. Option rows are full-width and\n * meet WCAG 2.5.5 on the default padding.\n *\n * @doc-a11y\n * Implements the WAI-ARIA APG Combobox + nested Listbox pattern. The panel\n * is portalled via the shared overlay primitive so it escapes clipping\n * ancestors. Selection emits at the leaf level via `[(kjValue)]`; the full\n * ancestor chain is available via `[(kjCascadePath)]` for forms that need\n * the breadcrumb.\n *\n * @doc-related select,tree-select,combobox\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name cascade-select\n * @doc-description Themed hierarchical select for multi-level option trees with hover or arrow-key sub-panel navigation.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-cascade-select',\n standalone: true,\n // Compose the umbrella KjCascadeSelect directive on the wrapper element.\n // Forwarding `kjValue`/`kjCascadePath` so the consumer can bind via\n // `[(value)]`/`[(cascadePath)]` on `<kj-cascade-select>`. The directive\n // provides `KJ_CASCADE_SELECT` (+ `KJ_SELECT`) at this element so\n // projected options/sub-panels resolve the same context via DI.\n hostDirectives: [\n {\n directive: KjCascadeSelect,\n inputs: ['kjValue', 'kjCascadePath'],\n outputs: ['kjValueChange', 'kjCascadePathChange'],\n },\n ],\n imports: [KjCascadeSelectTrigger, KjCascadeSelectPanel],\n template: `\n <button\n type=\"button\"\n kjCascadeSelectTrigger\n #trigger=\"kjCascadeSelectTrigger\"\n class=\"kj-cascade-trigger\"\n [disabled]=\"disabled() || null\"\n >\n <span class=\"kj-cascade-trigger-label\">{{ displayLabel() }}</span>\n <span class=\"kj-cascade-trigger-caret\" aria-hidden=\"true\">▾</span>\n </button>\n <div\n kjCascadeSelectPanel\n class=\"kj-cascade-panel\"\n [kjFor]=\"trigger\"\n >\n <ng-content />\n </div>\n `,\n styleUrl: './cascade-select.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-cascade-select',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCascadeSelectComponent {\n /** Placeholder shown when no value is selected. */\n readonly placeholder = input<string>('Select…');\n\n /** Whether the trigger is disabled. */\n readonly disabled = input(false);\n\n /** @internal — read the composed root directive's value for the label. */\n private readonly cascade = inject(KjCascadeSelect);\n\n /** @internal */\n readonly displayLabel = computed(() => {\n const v = this.cascade.value() as string | null | undefined;\n if (v === undefined || v === null || v === '') return this.placeholder();\n return String(v);\n });\n}\n\n/**\n * A single option row in a `<kj-cascade-select>`. Renders the option label\n * with an optional selection checkmark and a chevron glyph for branch options.\n * @doc\n * @doc-name cascade-select\n */\n@Component({\n selector: 'kj-cascade-option',\n standalone: true,\n // Extends `KjCascadeSelectOption` so this component IS the option\n // directive: inherits its inputs (`kjValue`/`kjLabel`/`kjDisabled` via the\n // inner `KjListItem` aliases), its host bindings (role, click handler,\n // hover timers, `data-*`), and its `KjListItem` hostDirective composition\n // — all without going through outer `hostDirectives` forwarding (Angular\n // 21 NG2017 forbids that for alias-exposed inputs). The `useExisting`\n // provider routes `inject(KjCascadeSelectOption)` from projected\n // sub-panels to this same instance.\n imports: [KjIconDirective],\n providers: [\n { provide: KjCascadeSelectOption, useExisting: forwardRef(() => KjCascadeOptionComponent) },\n ],\n template: `\n <span class=\"kj-cascade-option-label\">{{ item.label() }}</span>\n @if (isBranch()) {\n <i class=\"kj-cascade-option-chevron\" kjIcon=\"chevron-right\"></i>\n }\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'kj-cascade-option' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCascadeOptionComponent extends KjCascadeSelectOption {}\n\n/**\n * Sub-panel container for child options of a `<kj-cascade-option>`.\n * Projects `<kj-cascade-option>` rows for the next level of the hierarchy.\n * @doc\n * @doc-name cascade-select\n */\n@Component({\n selector: 'kj-cascade-sub-panel',\n standalone: true,\n hostDirectives: [\n {\n directive: KjCascadeSelectSubPanel,\n inputs: ['kjOwnerOptionId'],\n },\n ],\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-cascade-sub-panel',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCascadeSubPanelComponent {}\n","import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n TemplateRef,\n ViewEncapsulation,\n PLATFORM_ID,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n inject,\n input,\n model,\n} from '@angular/core';\nimport {\n KjCommandPalette,\n KjCommandInput,\n KjCommandList,\n KjCommandGroup,\n KjCommandSeparator,\n KjCommandEmpty,\n KjListItem,\n injectListItem,\n} from '@kouji-ui/core';\n\n/**\n * Marker directive for projecting custom footer content into a\n * `<kj-command-palette>`. When present, the wrapper hides its default\n * keyboard-hint footer and renders the projected content instead.\n *\n * @doc-css-var\n * --kj-command-item-direction — Flex direction on each command row. Defaults to `row`; switch to `column` for stacked layouts.\n * --kj-command-item-align — Cross-axis alignment of row contents. Defaults to `center`.\n * --kj-command-item-gap — Gap between icon and label inside a row. Defaults to --kj-space-md.\n *\n * @doc\n * @doc-name command-palette\n * @doc-description Themed Cmd-K modal command palette with fuzzy filtering, grouped results, and keyboard navigation.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjCommandPaletteFooter]',\n standalone: true,\n})\nexport class KjCommandPaletteFooter {}\n\n/**\n * Marker directive for the per-item template used by `<kj-command-palette>`\n * when the consumer passes `[kjItems]`. The template's implicit context is the\n * item itself; `index` is also exposed.\n *\n * @example\n * ```html\n * <kj-command-palette [kjItems]=\"results\">\n * <ng-template kjCommandPaletteItemTemplate let-item let-i=\"index\">\n * <kj-command-item [kjValue]=\"item.id\">{{ item.label }}</kj-command-item>\n * </ng-template>\n * </kj-command-palette>\n * ```\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: 'ng-template[kjCommandPaletteItemTemplate]',\n standalone: true,\n})\nexport class KjCommandPaletteItemTemplate<T = unknown> {\n readonly tpl = inject<TemplateRef<{ $implicit: T; index: number }>>(TemplateRef);\n}\n\n/**\n * Modal command palette component. Renders a centered dialog with backdrop\n * when `kjOpen()` is `true`. Composes `[kjCommandPalette]` on its host so all\n * filter/activate semantics work for both projected items and items rendered\n * via `[kjItems]` + `<ng-template kjCommandPaletteItemTemplate>`.\n *\n * Open/close via `[(kjOpen)]` 2-way binding. Optional Cmd-K (or any chord)\n * hotkey via `[kjHotkey]`.\n *\n * @doc-example Default\n * A trigger button opens the modal; type to filter the projected items.\n * @doc-file command-palette.example.ts\n * @doc-example Usage\n * A walkthrough of the most common command-palette usages — Cmd-K hotkey,\n * grouped rows, and a trigger button.\n * @doc-file command-palette.usage.example.ts\n * @doc-example With trigger and hotkey\n * Bind a global `mod+k` chord that toggles the palette open and closed.\n * @doc-file command-palette.dialog.example.ts\n * @doc-example With groups\n * `<kj-command-group>` clusters related commands under a label heading.\n * @doc-file command-palette.groups.example.ts\n * @doc-example Async with item template\n * `[kjItems]` + `kjCommandPaletteItemTemplate` for remote search results.\n * @doc-file command-palette.async.example.ts\n * @doc-example Fuzzy filter\n * Drop in a fuzzy `[kjFilter]` for typo-tolerant matching.\n * @doc-file command-palette.fuzzy.example.ts\n *\n * @doc-keyboard\n * ArrowDown|ArrowUp — Moves the active item through the visible list\n * Enter — Activates the highlighted item (emits `kjValueChange`)\n * Escape — Closes the palette and returns focus to the trigger\n * mod+k — Default hotkey toggles open / closed (configurable via `[kjHotkey]`)\n * Printable keys — Type into the search input to filter\n *\n * @doc-aria\n * role=\"dialog\" — On the panel; `aria-modal=\"true\"` while open\n * aria-label — Defaults to \"Command palette\"; override via `[kjAriaLabel]`\n * role=\"listbox\" — On the inner list (provided by `[kjCommandList]`)\n * role=\"option\" — On each `[kjCommandItem]`\n * aria-disabled — Reflected per item when `[kjDisabled]` is true\n * aria-live — The empty state announces \"No results found\" politely\n *\n * @doc-touch\n * Each command row enforces `min-height: 2.75rem` (44px) via CSS — every\n * row is a valid touch target. The footer keyboard hints are decorative.\n *\n * @doc-a11y\n * The palette is a modal dialog with backdrop and an inert siblings posture\n * while open. The search input keeps focus; the active item is tracked via\n * `aria-activedescendant`. When projected items are filtered out, groups\n * auto-hide so the announced \"results found\" count stays accurate. The\n * `[kjAutoCloseOnActivate]` posture (true by default) closes the palette\n * after activation and restores focus to the trigger.\n *\n * @doc-related dropdown-menu,dialog,menubar\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-palette',\n standalone: true,\n imports: [NgTemplateOutlet, KjCommandInput, KjCommandList, KjCommandEmpty],\n hostDirectives: [{\n directive: KjCommandPalette,\n inputs: ['kjShouldFilter', 'kjLoading', 'kjAutoActivateFirst', 'kjDismissOnActivate', 'kjValue', 'kjQuery', 'kjFilter'],\n outputs: ['kjValueChange', 'kjQueryChange', 'kjActivate'],\n }],\n template: `\n <div class=\"kj-command-palette__shell\" [class.is-open]=\"kjOpen()\">\n <div class=\"kj-command-palette__backdrop\" (click)=\"close()\" aria-hidden=\"true\"></div>\n <div\n class=\"kj-command-palette__dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"kjAriaLabel()\"\n (keydown.escape)=\"close()\"\n >\n <div class=\"kj-command-palette__input-wrapper\">\n <svg class=\"kj-command-palette__search-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.35-4.35\"/>\n </svg>\n <input\n #searchInput\n kjCommandInput\n type=\"search\"\n class=\"kj-command-palette__input\"\n [placeholder]=\"kjPlaceholder()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n @if (kjEscBadge()) {\n <kbd class=\"kj-command-palette__esc-kbd\">esc</kbd>\n }\n </div>\n <div kjCommandList class=\"kj-command-palette__list\">\n <div kjCommandEmpty class=\"kj-command-palette__empty\">No results found.</div>\n @if (itemTpl(); as t) {\n @for (item of kjItems(); track $index; let i = $index) {\n <ng-container *ngTemplateOutlet=\"t.tpl; context: { $implicit: item, index: i }\" />\n }\n }\n <ng-content />\n </div>\n @if (customFooter()) {\n <ng-content select=\"[kjCommandPaletteFooter]\" />\n } @else {\n <div class=\"kj-command-palette__footer\">\n <span><kbd>↑↓</kbd> navigate</span>\n <span><kbd>↵</kbd> open</span>\n <span><kbd>esc</kbd> close</span>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './command-palette.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-command-palette',\n style: 'display: contents;',\n '(kjActivate)': 'onActivate()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCommandPaletteComponent {\n /** Input placeholder text. */\n readonly kjPlaceholder = input<string>('Search commands…');\n\n /** Show an `esc` kbd badge on the right of the input. @default true */\n readonly kjEscBadge = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Accessible label for the dialog. @default 'Command palette' */\n readonly kjAriaLabel = input<string>('Command palette');\n\n /** Two-way bindable open state. */\n readonly kjOpen = model<boolean>(false);\n\n /**\n * Optional keyboard chord that toggles open/close. Empty string disables.\n * `mod` resolves to `Meta` on macOS, `Ctrl` elsewhere.\n * @default ''\n */\n readonly kjHotkey = input<string>('');\n\n /** Items list — rendered via `KjCommandPaletteItemTemplate` when provided. */\n readonly kjItems = input<readonly unknown[]>([]);\n\n /** Close the palette automatically when an item activates. @default true */\n readonly kjAutoCloseOnActivate = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n protected readonly itemTpl = contentChild(KjCommandPaletteItemTemplate);\n protected readonly customFooter = contentChild(KjCommandPaletteFooter);\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n constructor() {\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) return;\n const handler = (e: KeyboardEvent) => {\n const chord = this.kjHotkey();\n if (chord && this.matchesHotkey(e, chord)) {\n e.preventDefault();\n this.kjOpen.update(v => !v);\n }\n };\n document.addEventListener('keydown', handler);\n this.destroyRef.onDestroy(() => document.removeEventListener('keydown', handler));\n });\n\n // Focus the search input when the palette opens.\n effect(() => {\n if (!this.kjOpen()) return;\n if (!isPlatformBrowser(this.platformId)) return;\n queueMicrotask(() => {\n document.querySelector<HTMLInputElement>('.kj-command-palette__dialog .kj-command-palette__input')?.focus();\n });\n });\n }\n\n /** Programmatically close the palette. */\n close(): void {\n this.kjOpen.set(false);\n }\n\n /** Programmatically open the palette. */\n open(): void {\n this.kjOpen.set(true);\n }\n\n protected onActivate(): void {\n if (this.kjAutoCloseOnActivate()) this.close();\n }\n\n private matchesHotkey(event: KeyboardEvent, chord: string): boolean {\n const parts = chord.toLowerCase().split('+');\n const key = parts[parts.length - 1];\n const needsMod = parts.includes('mod');\n const needsShift = parts.includes('shift');\n const needsAlt = parts.includes('alt');\n\n const isMac = typeof navigator !== 'undefined' &&\n (navigator.platform?.toLowerCase().includes('mac') ||\n (navigator as Navigator & { userAgentData?: { platform: string } })\n .userAgentData?.platform?.toLowerCase().includes('mac'));\n const modPressed = isMac ? event.metaKey : event.ctrlKey;\n\n if (needsMod && !modPressed) return false;\n if (needsShift && !event.shiftKey) return false;\n if (needsAlt && !event.altKey) return false;\n return event.key.toLowerCase() === key;\n }\n}\n\n/**\n * Styled command item. Renders a `<button>` with `[kjCommandItem]` applied.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-item',\n standalone: true,\n // Compose `KjListItem` directly on the wrapper host so that\n // `KjCommandPalette.items = contentChildren(KjListItem)` resolves to\n // the wrapper element itself — content queries do not cross into a\n // child component's view template, so the previous shape (an inner\n // `<button kjCommandItem>` inside this view) left the palette's\n // `items()` empty and the empty-state slot permanently visible.\n //\n // The `role`, `data-active`, and `aria-selected` semantics that the\n // `KjCommandItem` directive ordinarily contributes are inlined below\n // because Angular's `hostDirectives` input-forwarding does not chain\n // transitively (composing `KjCommandItem` here and re-forwarding its\n // forwarded inputs fails the NG2017 check).\n hostDirectives: [{\n directive: KjListItem,\n inputs: [\n 'kjItemValue:kjValue',\n 'kjItemKeywords:kjKeywords',\n 'kjShortcut',\n 'kjDisabled',\n ],\n }],\n template: `<ng-content />`,\n styleUrl: './command-palette.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-command-item',\n 'role': 'option',\n '[attr.aria-selected]': 'isActive() ? \"true\" : \"false\"',\n '[attr.data-active]': 'isActive() ? \"\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCommandItemComponent {\n /** Value emitted on activation. */\n readonly kjValue = input<unknown>(undefined);\n /** Extra filter keywords. */\n readonly kjKeywords = input<readonly string[]>([]);\n /** ARIA keyboard shortcut hint (bound to `aria-keyshortcuts`). */\n readonly kjShortcut = input<string | null>(null);\n /** Disable this item. */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n private readonly _item = injectListItem<unknown>();\n private readonly _palette = inject(KjCommandPalette);\n\n /** Whether this item is the active (highlighted) one in the palette. */\n protected readonly isActive = computed(() =>\n this._palette.activeId() !== null && this._palette.activeId() === this._item.id,\n );\n}\n\n/**\n * Styled command group. Auto-hides when all child items are filtered out.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-group',\n standalone: true,\n hostDirectives: [KjCommandGroup],\n template: `\n @if (kjLabel()) {\n <div class=\"kj-command-group__label\">{{ kjLabel() }}</div>\n }\n <ng-content />\n `,\n styleUrl: './command-palette.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-command-group' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCommandGroupComponent {\n /** Optional visible label for the group. */\n readonly kjLabel = input<string>('');\n}\n\n/**\n * Styled command input wrapper. Renders an `<input type=\"search\">` with\n * the combobox ARIA wiring from `[kjCommandInput]`. Useful when consumers\n * build a custom palette layout outside `<kj-command-palette>`.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-input',\n standalone: true,\n imports: [KjCommandInput],\n template: `\n <input\n kjCommandInput\n type=\"search\"\n class=\"kj-command-input\"\n [placeholder]=\"kjPlaceholder()\"\n />\n `,\n styleUrl: './command-palette.css',\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCommandInputComponent {\n /** Input placeholder text. */\n readonly kjPlaceholder = input<string>('Search commands…');\n}\n\n/**\n * Styled separator between command groups.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-separator',\n standalone: true,\n hostDirectives: [KjCommandSeparator],\n template: ``,\n styleUrl: './command-palette.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-command-separator' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCommandSeparatorComponent {}\n\n/**\n * Styled empty state slot. Shown when no items match the current query.\n *\n * @doc-category Library/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-empty',\n standalone: true,\n hostDirectives: [KjCommandEmpty],\n template: `<ng-content />`,\n styleUrl: './command-palette.css',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-command-empty' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjCommandEmptyComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport {\n KjTreeSelect,\n KjTreeSelectContent,\n KjTreeSelectNode,\n KjTreeSelectToggle,\n KjTreeSelectTrigger,\n type KjTreeNode,\n} from '@kouji-ui/core';\n\n// ── Flat-tree projection ──────────────────────────────────────────────────────\n\n/**\n * Internal flat row produced by walking the tree. The wrapper renders a flat\n * list rather than nested DOM to avoid recursive component issues; indentation\n * is applied via `padding-inline-start`.\n */\ninterface FlatNode {\n node: KjTreeNode;\n level: number;\n size: number;\n pos: number;\n hasChildren: boolean;\n /** Path of ancestor values — used to determine visibility when ancestors collapse. */\n ancestorValues: readonly unknown[];\n}\n\n/** Walk the tree into a flat array. All nodes are included; visibility is\n * determined at render time by checking ancestor expansion state. */\nfunction flattenTree(\n nodes: readonly KjTreeNode[],\n level = 1,\n ancestors: readonly unknown[] = [],\n): FlatNode[] {\n const result: FlatNode[] = [];\n const size = nodes.length;\n nodes.forEach((node, i) => {\n const hasChildren = !!(node.children && node.children.length > 0);\n result.push({\n node,\n level,\n size,\n pos: i + 1,\n hasChildren,\n ancestorValues: ancestors,\n });\n if (hasChildren && node.children) {\n result.push(\n ...flattenTree(node.children as readonly KjTreeNode[], level + 1, [...ancestors, node.value]),\n );\n }\n });\n return result;\n}\n\n/**\n * Single styled tree node row for `<kj-tree-select>`. Renders an optional\n * expand/collapse toggle, a checkbox in multi mode, indentation based on\n * nesting level, and the node label.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name tree-select\n */\n@Component({\n selector: 'kj-tree-select-node',\n standalone: true,\n imports: [KjTreeSelectNode, KjTreeSelectToggle],\n template: `\n <div\n kjTreeSelectNode\n [kjValue]=\"value()\"\n [kjLabel]=\"label()\"\n [kjNodeLevel]=\"level()\"\n [kjNodeSize]=\"size()\"\n [kjNodePos]=\"pos()\"\n [kjDisabled]=\"disabled()\"\n [kjHasChildren]=\"hasChildren()\"\n class=\"kj-tree-select-node\"\n [style.padding-inline-start.rem]=\"(level() - 1) * 1.25 + 0.75\"\n >\n @if (hasChildren()) {\n <button\n type=\"button\"\n kjTreeSelectToggle\n class=\"kj-tree-select-toggle\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n >\n <span class=\"kj-tree-select-toggle-icon\"></span>\n </button>\n } @else {\n <span class=\"kj-tree-select-indent\" aria-hidden=\"true\"></span>\n }\n @if (multiMode()) {\n <span class=\"kj-tree-select-checkbox\" aria-hidden=\"true\"></span>\n }\n <span class=\"kj-tree-select-label\"><ng-content /></span>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents;' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTreeSelectNodeComponent {\n /** The value this node represents. */\n readonly value = input.required<unknown>();\n /** Display label for type-ahead. */\n readonly label = input<string>('');\n /** Nesting depth (1-based). */\n readonly level = input<number>(1);\n /** Number of siblings at this level. */\n readonly size = input<number>(1);\n /** 1-based position among siblings. */\n readonly pos = input<number>(1);\n /** Whether the node is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Whether the node has children (branch). */\n readonly hasChildren = input(false, { transform: booleanAttribute });\n /** Whether the tree is in multi-select mode (renders a checkbox). */\n readonly multiMode = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Styled wrapper around the headless `KjTreeSelect` directive family.\n *\n * Renders the trigger button showing the selected value label (single mode)\n * or a count of selected items (multiple mode), and a dropdown tree panel\n * containing all nodes. Tree data is passed via `[kjNodes]`.\n *\n * The component projects the recursive tree into a flat rendered list, using\n * CSS indentation (`padding-inline-start`) for visual hierarchy — avoiding\n * recursive component issues while remaining fully accessible via ARIA\n * `aria-level`, `aria-setsize`, and `aria-posinset` attributes.\n *\n * Collapsed branches' children are hidden via `display:none`; all nodes\n * remain in the DOM to preserve ARIA tree structure.\n *\n * @example\n * ```html\n * <kj-tree-select [kjNodes]=\"categories\" [(kjValue)]=\"selected\" />\n * ```\n *\n * @doc-example Default\n * The default playground — single-select tree with collapsed branches.\n * @doc-file tree-select.example.ts\n * @doc-example Usage\n * A walkthrough of the most common tree-select usages — single-select with a\n * readout, multi-select with a count, and pre-expanded branches on mount.\n * @doc-file tree-select.usage.example.ts\n * @doc-example Multi-select\n * `kjSelectionMode=\"multiple\"` renders a checkbox per row and emits an array.\n * @doc-file tree-select.multi.example.ts\n * @doc-example Pre-expanded\n * `[(kjExpandedKeys)]` seeds the open branches on mount.\n * @doc-file tree-select.expanded.example.ts\n * @doc-example In a field\n * Compose under `<kj-field>` for label / error / hint association.\n * @doc-file tree-select.field.example.ts\n * @doc-example Disabled\n * `[disabled]=\"true\"` removes the trigger from the tab order.\n * @doc-file tree-select.disabled.example.ts\n *\n * @doc-keyboard\n * Enter|Space — Opens the panel from the trigger; selects the focused node when open\n * ArrowDown — Moves focus to the next visible node\n * ArrowUp — Moves focus to the previous visible node\n * ArrowRight — Expands the focused branch (or moves into its children)\n * ArrowLeft — Collapses the focused branch (or moves to its parent)\n * Home|End — Jumps to the first/last visible node\n * Escape — Closes the panel and returns focus to the trigger\n * Type-ahead — Letters/digits jump to the next matching visible label\n *\n * @doc-aria\n * role=\"combobox\" — applied to the trigger button\n * role=\"tree\" — applied to the panel content\n * role=\"treeitem\" — applied to each rendered node\n * aria-level / setsize / posinset — wired per node for AT tree semantics\n * aria-expanded — set on branch nodes; mirrors expansion state\n * aria-selected — set on selected nodes\n * aria-multiselectable — set on the tree when in multi mode\n * data-multi — Mirrors multi-mode on the host for CSS hooks\n *\n * @doc-touch\n * Trigger and rows default to a 40px hit area at `md` density. For touch-first\n * surfaces, bump the parent's density token to reach the WCAG 2.5.5 floor.\n *\n * @doc-a11y\n * Implements the WAI-ARIA Tree APG pattern. All nodes stay in the DOM with\n * `[hidden]` toggling visibility so the ARIA tree structure (`aria-setsize`,\n * `aria-level`, `aria-posinset`) is stable across collapse/expand. Focus is\n * restored to the trigger when the panel closes.\n *\n * @doc-related select,cascade-select,combobox\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name tree-select\n * @doc-description Themed dropdown that surfaces a hierarchical tree of options with single or multi-select and arrow-key navigation.\n * @doc-is-main\n */\n@Component({\n selector: 'kj-tree-select',\n standalone: true,\n hostDirectives: [\n {\n directive: KjTreeSelect,\n inputs: [\n 'kjNodes',\n 'kjSelectionMode',\n 'kjValue',\n 'kjExpandedKeys',\n ],\n outputs: [\n 'kjValueChange',\n 'kjExpandedKeysChange',\n 'kjNodeSelect',\n 'kjNodeExpand',\n 'kjNodeCollapse',\n ],\n },\n ],\n imports: [KjTreeSelectTrigger, KjTreeSelectContent, KjTreeSelectNodeComponent],\n template: `\n <button\n type=\"button\"\n kjTreeSelectTrigger\n #trig=\"kjTreeSelectTrigger\"\n class=\"kj-tree-select-trigger\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [disabled]=\"disabled() || null\"\n >\n <span class=\"kj-tree-select-trigger-label\">{{ displayLabel() }}</span>\n <span class=\"kj-tree-select-caret\" aria-hidden=\"true\">▾</span>\n </button>\n <kj-tree-select-content [kjFor]=\"trig\" class=\"kj-tree-select-panel\">\n @for (row of flatNodes(); track row.node.value) {\n <kj-tree-select-node\n [value]=\"row.node.value\"\n [label]=\"row.node.label\"\n [level]=\"row.level\"\n [size]=\"row.size\"\n [pos]=\"row.pos\"\n [disabled]=\"!!row.node.disabled\"\n [hasChildren]=\"row.hasChildren\"\n [multiMode]=\"ts.selectionMode() === 'multiple'\"\n [hidden]=\"isRowHidden(row)\"\n >{{ row.node.label }}</kj-tree-select-node>\n }\n @if (flatNodes().length === 0) {\n <div class=\"kj-tree-select-empty\">No options</div>\n }\n </kj-tree-select-content>\n `,\n styleUrl: './tree-select.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kj-tree-select',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n '[attr.data-multi]': \"ts.selectionMode() === 'multiple' ? '' : null\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjTreeSelectComponent {\n /** Placeholder text shown when nothing is selected. */\n readonly placeholder = input<string>('Select…');\n\n /** Whether the trigger is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Optional resolver for value → display label in the trigger. When omitted\n * the component searches the `kjNodes` tree by value. Falls back to\n * `String(value)` for primitives.\n */\n readonly getLabel = input<(value: unknown) => string | undefined>(\n () => undefined,\n );\n\n /** Optional ARIA label for the trigger when no visible label exists. */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** @internal — reference to the headless root directive. */\n readonly ts = inject(KjTreeSelect);\n\n /**\n * @internal — flat projected list of all tree nodes for rendering.\n * Children of collapsed branches are still in the list but have `[hidden]`\n * applied to keep them out of the visual and tab order.\n */\n readonly flatNodes = computed<FlatNode[]>(() =>\n flattenTree(this.ts.nodes() as readonly KjTreeNode[]),\n );\n\n /**\n * @internal — whether a row's ancestors include any collapsed branch, making\n * this row invisible. Reads `expandedValues` signal so Angular tracks it.\n */\n isRowHidden(row: FlatNode): boolean {\n if (row.ancestorValues.length === 0) return false;\n const expanded = this.ts.expandedValues();\n // If any ancestor value is NOT expanded, the row is hidden\n for (const ancestorValue of row.ancestorValues) {\n if (!expanded.has(ancestorValue)) return true;\n }\n return false;\n }\n\n /** @internal — display label shown in the trigger button. */\n readonly displayLabel = computed(() => {\n const mode = this.ts.selectionMode();\n const raw = this.ts.value();\n const selected: readonly unknown[] = Array.isArray(raw)\n ? raw\n : raw === null || raw === undefined\n ? []\n : [raw];\n if (selected.length === 0) return this.placeholder();\n if (mode === 'multiple') {\n return `${selected.length} selected`;\n }\n // Single mode: look up label from the flat node list\n const val = selected[0];\n const customLabel = this.getLabel()(val);\n if (customLabel !== undefined) return customLabel;\n const found = this._findLabel(val, this.ts.nodes() as readonly KjTreeNode[]);\n return found ?? String(val);\n });\n\n private _findLabel(value: unknown, nodes: readonly KjTreeNode[]): string | undefined {\n for (const node of nodes) {\n if (node.value === value) return node.label;\n if (node.children) {\n const found = this._findLabel(value, node.children);\n if (found !== undefined) return found;\n }\n }\n return undefined;\n }\n}\n","// Typography surface — directives only, no wrapper components.\n// Per the analysis, Typography ships no `<kj-h1>` / `<kj-prose>` Angular\n// components: the CSS class `kj-prose` plus five attribute directives are\n// the entire surface. The components package re-exports the directives\n// from `@kouji-ui/core` for ergonomic consumption alongside the rest of\n// the library, and ships the `kj-prose` stylesheet via the package's\n// stylesheet pipeline.\nexport { KjLead, KjMuted, KjCode, KjBlockquote, KjTruncate } from '@kouji-ui/core';\n","// Public API for @kouji-ui/components\nexport const KJ_COMPONENTS_VERSION = '0.0.1';\n\nexport * from './accordion/index';\nexport * from './alert/index';\nexport * from './avatar/index';\nexport * from './badge/index';\nexport * from './breadcrumb/index';\nexport * from './button/index';\nexport * from './button-group/index';\nexport * from './calendar/index';\nexport * from './card/index';\nexport * from './carousel/index';\nexport * from './chat/index';\nexport * from './checkbox/index';\nexport * from './color-picker/index';\nexport * from './combobox/index';\nexport * from './confirm-popup/index';\nexport * from './date-picker/index';\nexport * from './dialog/index';\nexport * from './drawer/index';\nexport * from './dropdown-menu/index';\nexport * from './empty-state/index';\nexport * from './field/index';\nexport * from './file-upload/index';\nexport * from './form/index';\nexport * from './icon/index';\nexport * from './input/index';\nexport * from './input-group/index';\nexport * from './input-mask/index';\nexport * from './input-otp/index';\nexport * from './kbd/index';\nexport * from './divider/index';\nexport * from './link/index';\nexport * from './list/index';\nexport * from './menubar/index';\nexport * from './number-input/index';\nexport * from './overlay-badge/index';\nexport * from './pagination/index';\nexport * from './password-input/index';\nexport * from './popover/index';\nexport * from './progress-bar/index';\nexport * from './radio/index';\nexport * from './select/index';\nexport * from './skeleton/index';\nexport * from './slider/index';\nexport * from './speed-dial/index';\nexport * from './spinner/index';\nexport * from './stepper/index';\nexport * from './table/index';\nexport * from './tabs/index';\nexport * from './tag/index';\nexport * from './textarea/index';\nexport * from './time-picker/index';\nexport * from './toast/index';\nexport * from './toggle/index';\nexport * from './tooltip/index';\nexport * from './cascade-select/index';\nexport * from './command-palette/index';\nexport * from './tree-select/index';\nexport * from './typography/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","headerLabel"],"mappings":";;;;;;;;;;;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEG;MAeU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,sSANrB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ggDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAdhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,cAAA,EACA,CAAC;AACf,4BAAA,SAAS,EAAE,WAAW;AACtB,4BAAA,MAAM,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,oCAAoC,CAAC;4BAChF,OAAO,EAAE,CAAC,4BAA4B,CAAC;AACxC,yBAAA,CAAC,EAAA,QAAA,EACQ,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,cAAc,EAAE,EAAA,eAAA,EACd,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,ggDAAA,CAAA,EAAA;;AAIjD;;;;AAIG;MAUU,2BAA2B,CAAA;IAC7B,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;uGADrB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAL5B,CAAA,uKAAA,CAAyK,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADzK,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMjB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,QAAQ,EAAE,CAAA,uKAAA,CAAyK;oBACnL,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAKD;;;;;;;;AAQG;MAmBU,wBAAwB,CAAA;IAC1B,KAAK,GAAG,KAAK,CAAqB,SAAS;8EAAC;IAC5C,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;uGAFrB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVzB;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1BU,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA+B3B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE,CAAC;AACf,4BAAA,SAAS,EAAE,eAAe;AAC1B,4BAAA,MAAM,EAAE,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;yBAC3D,CAAC;oBACF,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACtC,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;oBACpC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;AAIG;MAUU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAL5B,CAAA,yEAAA,CAA2E,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD3E,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMjB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,QAAQ,EAAE,CAAA,yEAAA,CAA2E;oBACrF,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACrID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFG;MAgCU,gBAAgB,CAAA;;;;IAIlB,SAAS,GAAG,KAAK,CAAS,MAAM;kFAAC;IACjC,MAAM,GAAG,KAAK,CAAS,IAAI;+EAAC;IAC5B,WAAW,GAAG,KAAK,CAA0B,SAAS;oFAAC;IACvD,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC7D,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;uGARhD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfjB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6uFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA/B5B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,MAAM,EAAE;gCACN,WAAW;gCACX,QAAQ;gCACR,aAAa;gCACb,eAAe;gCACf,aAAa;AACd,6BAAA;4BACD,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC9B,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;AAST,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6uFAAA,CAAA,EAAA;;AAajD;;;;;;;AAOG;MAUU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,sKALrB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,WAAW,CAAC;AAC7B,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAUU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,yKALtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,YAAY,CAAC;AAC9B,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;oBAClC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;AAMG;MAUU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,2LAL5B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,kBAAkB,CAAC;AACpC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;oBACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;AAOG;MAUU,uBAAuB,CAAA;IACzB,mBAAmB,GAAG,KAAK,CAAS,eAAe;4FAAC;uGADlD,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,qZALxB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;AAChF,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;oBACpC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAKD;;;;;;;;AAQG;MAiBU,uBAAuB,CAAA;IACzB,mBAAmB,GAAG,KAAK,CAAS,SAAS;4FAAC;IAC9C,qBAAqB,GAAG,KAAK,CAAS,OAAO;8FAAC;IAC9C,kBAAkB,GAAG,KAAK,CAAS,MAAM;2FAAC;uGAHxC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZxB,CAAA;;;;;;;wDAO4C,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAR5C,cAAc,6IAAE,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAa9B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAhBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;AAC1C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;AAO4C,uDAAA,CAAA;oBACtD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC9OD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;MA8BU,iBAAiB,CAAA;AAC5B;;;;;AAKG;IACc,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE3D,GAAG,GAAG,KAAK,CAAqB,SAAS;4EAAC;IAC1C,GAAG,GAAG,KAAK,CAAqB,SAAS;4EAAC;;IAE1C,OAAO,GAAG,KAAK,CAAgC,EAAE;gFAAC;AAC3D;;;;AAIG;IACM,IAAI,GAAG,KAAK,CAA2B,SAAS;6EAAC;AAC1D;;;;AAIG;IACM,KAAK,GAAG,KAAK,CAA4B,SAAS;8EAAC;;AAGzC,IAAA,YAAY,GAAG,QAAQ,CAAe,MAAK;AAC5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAA8B;QAChE,OAAO,SAAS,IAAI,IAAI;IAC1B,CAAC;qFAAC;;AAGiB,IAAA,aAAa,GAAG,QAAQ,CAAgB,MAAK;AAC9D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG;QACnB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,QAAQ;IACxC,CAAC;sFAAC;AAEQ,IAAA,UAAU,CAAC,CAAU,EAAA;QAC7B,OAAO,CAAC,YAAY,WAAW;IACjC;uGA3CW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBlB;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+lCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAZS,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAyBhD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,cAAA,EACA,CAAC,QAAQ,CAAC,EAAA,OAAA,EACjB,CAAC,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClD;;;;;;;;;;;GAWT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,WAAW;AACpB,wBAAA,kBAAkB,EAAE,gBAAgB;AACpC,wBAAA,mBAAmB,EAAE,iBAAiB;;;AAGtC,wBAAA,cAAc,EAAE,OAAO;qBACxB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+lCAAA,CAAA,EAAA;;;ACxEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DG;MAqCU,sBAAsB,CAAA;AACjC;;;;AAIG;AACc,IAAA,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;AAE7B,IAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;IAExC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,EAAE,CAAA,CAAE;sFAAC;AAE7E;;;;;AAKG;AACgB,IAAA,SAAS,GAAG,QAAQ,CACrC,MAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAgC,IAAI,QAAQ;kFACpE;uGApBU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBvB;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAkBhB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApClC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,aAAa;AACxB,4BAAA,MAAM,EAAE;gCACN,OAAO;gCACP,SAAS;gCACT,QAAQ;gCACR,SAAS;gCACT,aAAa;gCACb,mBAAmB;gCACnB,QAAQ;gCACR,qBAAqB;AACtB,6BAAA;AACF,yBAAA;AACF,qBAAA;oBACD,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,iBAAiB;AAC3B,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACnGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDG;MAqBU,gBAAgB,CAAA;IAClB,OAAO,GAAG,KAAK,CAAiB,SAAS;gFAAC;IAC1C,IAAI,GAAG,KAAK,CAA4B,IAAI;6EAAC;IAC7C,GAAG,GAAG,KAAK,CAAC,KAAK,2EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAHjD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBjB;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wgDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiBN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,CAAC,EAAA,QAAA,EACR;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,wgDAAA,CAAA,EAAA;;;AC9DjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EG;MAoBU,qBAAqB,CAAA;;IAEvB,MAAM,GAAG,KAAK,CAAS,IAAI;+EAAC;uGAF1B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,mhBAVtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,utEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAnBjC,SAAS;+BACE,mCAAmC,EAAA,UAAA,EACjC,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,YAAY;4BACvB,MAAM,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;AACnE,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,MAAM,EAAE,YAAY;AACpB,wBAAA,kBAAkB,EAAE,UAAU;qBAC/B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,utEAAA,CAAA,EAAA;;AAOjD;;;;;;;AAOG;MAUU,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0OAL1B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4CAA4C;AACtD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AACrE,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;AAMG;MAUU,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,4MAL1B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4CAA4C;AACtD,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,gBAAgB,CAAC;AAClC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;;;;AAWG;MA0BU,yBAAyB,CAAA;;IAE3B,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;;IAG7C,QAAQ,GAAG,KAAK,CAA+D,SAAS;iFAAC;;IAGzF,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;;IAGlD,SAAS,GAAG,KAAK,CAAS,OAAO;kFAAC;;IAGlC,MAAM,GAAG,KAAK,CAAS,IAAI;+EAAC;;IAG5B,WAAW,GAAG,KAAK,CAA8B,OAAO;oFAAC;;IAGzD,UAAU,GAAG,KAAK,CAAC,KAAK;mFAAC;;IAGzB,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAvB1E,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArB1B;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjBS,MAAM,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAsBL,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAzBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,MAAM,CAAC;AACjB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AA2BD;;;;;;;;AAQG;MAUU,4BAA4B,CAAA;uGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,0NAL7B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBATxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oDAAoD;AAC9D,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,mBAAmB,CAAC;AACrC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE;oBAC1C,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;AAOG;MAUU,8BAA8B,CAAA;uGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,gOAL/B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAT1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sDAAsD;AAChE,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,qBAAqB,CAAC;AACvC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE;oBAC5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;AAMG;MAUU,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,gMAL9B,CAAA,0BAAA,CAA4B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAK3B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,oBAAoB,CAAC;AACtC,oBAAA,QAAQ,EAAE,CAAA,0BAAA,CAA4B;oBACtC,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;oBAC3C,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC3QD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGG;MA8BU,iBAAiB,CAAA;IACnB,SAAS,GAAG,KAAK,CAAC,SAAS;kFAAC;IAC5B,MAAM,GAAG,KAAK,CAAC,IAAI;+EAAC;IACpB,UAAU,GAAG,KAAK,CAAC,KAAK;mFAAC;IACzB,SAAS,GAAG,KAAK,CAAC,KAAK;kFAAC;IACxB,WAAW,GAAG,KAAK,CAAC,KAAK;oFAAC;;;IAG1B,SAAS,GAAqC,KAAK,CAAsB,SAAS;kFAAC;IACnF,MAAM,GAAG,KAAK,CAAgC,QAAQ;+EAAC;IACvD,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;uGAVhD,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBlB;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6iJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApBS,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA0BP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EACP,CAAC,QAAQ,CAAC,EAAA,QAAA,EACT;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6iJAAA,CAAA,EAAA;;;AC/HjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEG;MAmBU,sBAAsB,CAAA;AACjC;;;;AAIG;IACM,aAAa,GAAG,KAAK,CAA2B,YAAY;sFAAC;AAEtE;;;AAGG;IACM,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;AAEzD;;;AAGG;IACM,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;AAEtD;;;AAGG;IACM,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE;;;AAGG;IACM,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;uGA9BhD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,igCATvB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+7CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlBlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,aAAa;4BACxB,MAAM,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC;AAC/D,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,mBAAmB,EAAE,eAAe;qBACrC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+7CAAA,CAAA,EAAA;;;AChFjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DG;MAuEU,mBAAmB,CAAA;;IAErB,OAAO,GAAG,KAAK,CAAc,IAAI;gFAAC;;IAGlC,KAAK,GAAG,KAAK,CAAc,IAAI;8EAAC;;IAGhC,KAAK,GAAG,KAAK,CAAc,IAAI;8EAAC;;IAGhC,eAAe,GAAG,KAAK,CAAgC,IAAI;wFAAC;;IAG5D,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;;IAG5B,gBAAgB,GAAG,KAAK,CAAS,CAAC;yFAAC;;IAGnC,WAAW,GAAG,KAAK,CAAS,UAAU;oFAAC;;IAGvC,UAAU,GAAG,KAAK,CAA4B,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAvBnF,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gyDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA7DS,UAAU,6QAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,6GAAE,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAmE3E,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAtE/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EAC/C,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gyDAAA,CAAA,EAAA;;;AC9IjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEG;MAaU,eAAe,CAAA;IACjB,OAAO,GAAG,KAAK,CAAmC,SAAS;gFAAC;uGAD1D,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,oSAThB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q9EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAZ3B,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,iBAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,SAAS;AAClB,wBAAA,qBAAqB,EAAE,WAAW;qBACnC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,q9EAAA,CAAA,EAAA;;AAMjD;;;;;;;;AAQG;MAaU,oBAAoB,CAAA;IACtB,IAAI,GAAG,KAAK,CAAqB,IAAI;6EAAC;IACtC,GAAG,GAAG,KAAK,CAAsB,OAAO;4EAAC;uGAFvC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,6aATrB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,kBAAkB,EAAE,QAAQ;AAC5B,wBAAA,iBAAiB,EAAE,OAAO;AAC3B,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;AAIG;MASU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sHALtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACnC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;AAIG;MASU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,yHALrB,CAAA,6CAAA,CAA+C,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAK9C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,6CAAA,CAA+C;oBACzD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;AAIG;MASU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4HALxB,CAAA,8CAAA,CAAgD,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAK/C,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,8CAAA,CAAgD;oBAC1D,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;AAIG;MAYU,sBAAsB,CAAA;IACxB,MAAM,GAAG,KAAK,CAAC,IAAI;+EAAC;uGADlB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,2TARvB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAXlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,iBAAiB;AAC1B,wBAAA,oBAAoB,EAAE,sBAAsB;AAC7C,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAKD;;;;AAIG;MAYU,qBAAqB,CAAA;IACvB,KAAK,GAAG,KAAK,CAAyC,KAAK;8EAAC;uGAD1D,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wSARtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,mBAAmB,EAAE,SAAS;AAC/B,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC9JD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FG;MAiCU,mBAAmB,CAAA;AACX,IAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;AAEK,IAAA,UAAU;IAE/D,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;IACnD;uGAPW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXpB;;;GAGT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8pIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArBS,YAAY,iHAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA6B7B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhC/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,cAAA,EACzB;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,UAAU;AACrB,4BAAA,MAAM,EAAE;gCACN,gBAAgB;gCAChB,cAAc;gCACd,4BAA4B;gCAC5B,gCAAgC;gCAChC,sCAAsC;gCACtC,gBAAgB;gCAChB,gBAAgB;gCAChB,0BAA0B;gCAC1B,wBAAwB;AACzB,6BAAA;4BACD,OAAO,EAAE,CAAC,4BAA4B,CAAC;AACxC,yBAAA;qBACF,EAAA,QAAA,EACS;;;GAGT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,aAAa;qBACrB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8pIAAA,CAAA,EAAA;;sBAK9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;AAO3C;;;;;;;;AAQG;MAUU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,0LAL5B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,kBAAkB,CAAC;AACpC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE;oBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAkBU,wBAAwB,CAAA;AAChB,IAAA,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;IAC/B,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;uFAAC;uGAFpE,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,6TARzB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQf,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAjBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,eAAe;AAC1B,4BAAA,MAAM,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,CAAC;AAC9E,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC1B,wBAAA,mBAAmB,EAAE,kBAAkB;AACxC,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;;AAQG;MAmBU,2BAA2B,CAAA;;IAE7B,SAAS,GAAG,KAAK,CAAS,gBAAgB,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;uGAFlE,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAd5B;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAVS,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAejB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;AAOG;MAmBU,uBAAuB,CAAA;;IAEzB,SAAS,GAAG,KAAK,CAAS,YAAY,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;uGAF9D,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdxB;;;;;;;;;GAST,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAVS,cAAc,6DAAE,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAe9B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAlBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;AAC1C,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;;;;AAUG;MA8BU,6BAA6B,CAAA;AACrB,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAe;IAC9C,mBAAmB,GAAG,eAAe,CAAC,mBAAmB;4FAAC;;AAGxD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC;oFAAC;uGAL7E,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAEe,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBhE;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArBS,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA0BlB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBA7BzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC9B,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,oBAAoB;AAC/B,4BAAA,MAAM,EAAE,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;AACvE,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;oBACzC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;2GAGwD,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAM5E;;;;;;;;;AASG;MAmBU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,8RAL5B,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,kBAAkB;AAC7B,4BAAA,MAAM,EAAE;gCACN,wBAAwB;gCACxB,8BAA8B;gCAC9B,8BAA8B;AAC/B,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,CAAE;oBACZ,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAmBU,wBAAwB,CAAA;AAChB,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAe;;IAEtD,SAAS,GAAG,KAAK,CAAS,gBAAgB,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IAC1D,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;+EAAC;uGAJvD,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdzB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAVS,qBAAqB,EAAA,QAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAepB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB,CAAC;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC1VD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EG;MAgBU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+OANnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kkKAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,MAAM,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;AAC5C,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,eAAA,EACb,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,kkKAAA,CAAA,EAAA;;AAIjD;;;;;;;;;;;;;;AAcG;MAeU,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,wQALhB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAd3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;4BACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,CAAC;AAC9D,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAUU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wKALtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,YAAY,CAAC;AAC9B,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAUU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wKALtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,YAAY,CAAC;AAC9B,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;;;;;;AAaG;MAoBU,qBAAqB,CAAA;;IAEvB,SAAS,GAAG,KAAK,CAAsB,SAAS;kFAAC;;IAEjD,MAAM,GAAG,KAAK,CAAmB,IAAI;+EAAC;;IAEtC,kBAAkB,GAAG,KAAK,CAAC,KAAK;2FAAC;uGAN/B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAftB;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAnBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAUD;;;;;;;AAOG;MAeU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wMALtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAdjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,YAAY;4BACvB,MAAM,EAAE,CAAC,SAAS,CAAC;AACpB,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACtQD,IAAI,iBAAiB,GAAG,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEG;MAiCU,mBAAmB,CAAA;IACrB,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,aAAa,GAAG,KAAK,CAAC,KAAK;sFAAC;IAC5B,IAAI,GAAG,KAAK,CAAqB,IAAI;6EAAC;AAE5B,IAAA,OAAO,GAAG,CAAA,YAAA,EAAe,EAAE,iBAAiB,EAAE;AAEhD,IAAA,GAAG,GAAG,SAAS,CAAC,QAAQ,CAA0B,KAAK,CAAC;AAEzE;AAC4D;AAClD,IAAA,YAAY,CAAC,CAAa,EAAA;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc;QAC/B,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE;QAChD,KAAK,CAAC,KAAK,EAAE;IACf;uGAlBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BpB;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0uDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApBS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA6BT,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhC/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,CAAC,EAAA,QAAA,EACX;;;;;;;;;;;;;;;;;;;GAmBT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,sBAAsB,EAAE,wBAAwB;qBACjD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,0uDAAA,CAAA,EAAA;+eAUoB,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACvF1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEG;MA+EU,sBAAsB,CAAA;;IAExB,QAAQ,GAAG,KAAK,CAAgB,KAAK;iFAAC;;IAEtC,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE3D,iBAAiB,GAAG,KAAK,CAAC,KAAK;0FAAC;;IAEhC,SAAS,GAAG,KAAK,CAA2B,EAAE;kFAAC;;IAE/C,SAAS,GAAG,KAAK,CAAC,KAAK;kFAAC;;IAExB,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAE/B,UAAU,GAAG,KAAK,CAAC,KAAK;mFAAC;;IAEzB,cAAc,GAAG,KAAK,CAAU,IAAI;uFAAC;;IAGrC,YAAY,GAAG,MAAM,EAAW;;IAEhC,QAAQ,GAAG,MAAM,EAAgB;AAGhC,IAAA,WAAW;AAErB;;;;AAIG;AACO,IAAA,aAAa,CAAC,IAAmB,EAAA;AACzC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aAClE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAChC,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAE;IACzD;;IAGU,YAAY,CAAC,IAAmB,EAAE,MAAqB,EAAA;AAC/D,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B;;;;;AAOA,IAAA,UAAU,CAAC,GAAY,EAAA;QACrB,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;IAC5C;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;QAC3C,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACjD;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;QAC9B,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAClD;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC;IACzD;uGA3DW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAlEtB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,sBAAsB;AACnC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAmFU,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlFd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g+HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjEC,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,EAAA,QAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,kBAAkB,EAAA,QAAA,EAAA,2BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA9ElC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACP,aAAa;wBACb,oBAAoB;wBACpB,kBAAkB;wBAClB,iBAAiB;wBACjB,sBAAsB;wBACtB,wBAAwB;wBACxB,kBAAkB;qBACnB,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,sBAAwB;AACnC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,KAAK,EAAE,wBAAwB;qBAChC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g+HAAA,CAAA,EAAA;;sBAyB9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AClL5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EG;MA2CU,mBAAmB,CAAA;;IAErB,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAE/B,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAJtD,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBpB;;;;;;;;;;GAUT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8lEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,eAAe,kGAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoBjC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1C/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,UAAU;AACrB,4BAAA,MAAM,EAAE;gCACN,gBAAgB;gCAChB,gBAAgB;gCAChB,8BAA8B;gCAC9B,oBAAoB;gCACpB,sBAAsB;gCACtB,kBAAkB;gCAClB,wCAAwC;AACzC,6BAAA;AACD,4BAAA,OAAO,EAAE;gCACP,4BAA4B;gCAC5B,4BAA4B;gCAC5B,kBAAkB;AACnB,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAA,QAAA,EACnC;;;;;;;;;;GAUT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,sBAAsB,EAAE,wBAAwB;qBACjD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8lEAAA,CAAA,EAAA;;AASjD;;;;;;AAMG;MAUU,yBAAyB,CAAA;;IAE3B,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAW;;IAEjC,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAJtD,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAL1B,CAAA,mJAAA,CAAqJ,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADrJ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,QAAQ,EAAE,CAAA,mJAAA,CAAqJ;oBAC/J,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAQD;;;;;;;AAOG;MAcU,wBAAwB,CAAA;AAClB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;;IAExC,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI;AACd,eAAA,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;AAChB,eAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK;eAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;IACjC;uGARW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,kPAVzB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUf,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,eAAe,EAAE,0BAA0B;AAC5C,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAYD;;;;;;AAMG;MAcU,0BAA0B,CAAA;;AAE5B,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;uGAFrB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,sPAV3B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUf,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAbtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,qBAAqB;AAC9B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,eAAe,EAAE,0BAA0B;AAC5C,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACpMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEG;MA8BU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,mYATxB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA7BnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,cAAA,EAIA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,cAAc;AACzB,4BAAA,MAAM,EAAE;gCACN,eAAe;gCACf,gBAAgB;AACjB,6BAAA;AACD,4BAAA,OAAO,EAAE;gCACP,aAAa;gCACb,aAAa;gCACb,UAAU;AACX,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;AAIjD;;;;;;;;;;;;;AAaG;MAcU,8BAA8B,CAAA;uGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,2OAT/B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAb1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,cAAA,EACA,CAAC,qBAAqB,CAAC,EAAA,QAAA,EAC7B,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,0BAA0B;AACjC,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;AAIjD;;;;;;;;;;;AAWG;MAkBU,8BAA8B,CAAA;;IAEhC,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAwB;;IAE9C,YAAY,GAAG,KAAK,CAAoB,EAAE;qFAAC;AAEpD;;;;AAIG;AACM,IAAA,kBAAkB,GAAG,QAAQ,CAAS,MAAK;AAClD,QAAA,MAAM,GAAG,GAAa,CAAC,0BAA0B,CAAC;AAClD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;AAC7B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpB,KAAK,MAAM,CAAC,IAAI,CAAC;AAAE,gBAAA,IAAI,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC;aAAO,IAAI,CAAC,EAAE;AACZ,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACb;AACA,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB,CAAC;2FAAC;uGApBS,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAb/B;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EALS,gBAAgB,oHAAE,qBAAqB,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FActC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAjB1C,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EAAA,QAAA,EACxC;;;;GAIT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,+BAA+B;AACtC,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;AAyBjD;;;;;;;AAOG;MAWU,8BAA8B,CAAA;uGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,qMAN/B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAV1C,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,cAAA,EACA,CAAC,qBAAqB,CAAC,EAAA,QAAA,EAC7B,gBAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAA,eAAA,EAC1B,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;AAIjD;;;;;;;AAOG;MAcU,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,wOAT9B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAbzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,cAAA,EACA,CAAC,oBAAoB,CAAC,EAAA,QAAA,EAC5B,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,yBAAyB;AAChC,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;AAIjD;;;;;;AAMG;MAcU,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,wOAT9B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAbzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,cAAA,EACA,CAAC,oBAAoB,CAAC,EAAA,QAAA,EAC5B,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,yBAAyB;AAChC,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;AAIjD;;;;;;AAMG;MAUU,8BAA8B,CAAA;uGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,0IAN/B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAT1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cACxB,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAA,eAAA,EAC1B,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y1CAAA,CAAA,EAAA;;;ACrQjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EG;MAuDU,qBAAqB,CAAA;;IAEvB,OAAO,GAAG,KAAK,CAAc,IAAI;gFAAC;;IAGlC,MAAM,GAAG,KAAK,CAAU,KAAK;+EAAC;;IAG9B,KAAK,GAAG,KAAK,CAAc,IAAI;8EAAC;;IAGhC,KAAK,GAAG,KAAK,CAAc,IAAI;8EAAC;;IAGhC,eAAe,GAAG,KAAK,CAAgC,IAAI;wFAAC;;IAG5D,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;;IAG5B,gBAAgB,GAAG,KAAK,CAAgB,IAAI;yFAAC;;IAG7C,aAAa,GAAG,KAAK,CAAS,EAAE;sFAAC;;IAGjC,UAAU,GAAG,KAAK,CAA4B,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGrF,UAAU,GAAG,KAAK,CAA4B,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGrF,MAAM,GAAG,KAAK,CAA4B,IAAI;+EAAC;;IAGxD,gBAAgB,CAAC,IAAiB,EAAE,MAAoB,EAAA;AACtD,QAAA,IAAI,IAAI;AAAE,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACnC;uGArCW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7CtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g1CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA5CC,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,kJACpB,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA+CV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtDjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,oBAAoB;wBACpB,mBAAmB;qBACpB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EAClD,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g1CAAA,CAAA,EAAA;;;ACvIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DG;MAUU,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,2HANlB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u6CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,u6CAAA,CAAA,EAAA;;;ACrEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEG;MAUU,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,2HANlB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0hGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,0hGAAA,CAAA,EAAA;;;ACvDjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFG;MAkBU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4HANxB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+sFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjBnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,qBAAqB;wBACrB,qBAAqB;wBACrB,kBAAkB;wBAClB,uBAAuB;wBACvB,mBAAmB;wBACnB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+sFAAA,CAAA,EAAA;;;ACnHjD,MAAM,0BAA0B,GAAG;AACjC,IAAA,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC1B,IAAA,OAAO,EAAE,IAAI;CACd;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FG;MAqBU,qBAAqB,CAAA;;IAEvB,SAAS,GAAG,KAAK,CAAsB,SAAS;kFAAC;AAE1D;;;;;;AAMG;IACM,MAAM,GAAG,KAAK,CAAmB,KAAK;+EAAC;;IAGvC,iBAAiB,GAAG,KAAK,CAAqB,SAAS;0FAAC;AAE9C,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ;IAC1D,CAAC;6EAAC;AAEiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,GAAG,WAAW,GAAG,QAAQ;IAC9D,CAAC;iFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;mFAAC;uGA3BpE,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAbrB;AACT,YAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,0BAA0B,EAAE;AAClE,SAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANS,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gxFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiBf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBApBjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,iBAEX,iBAAiB,CAAC,IAAI,EAAA,cAAA,EACrB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAA,SAAA,EAChD;AACT,wBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,0BAA0B,EAAE;qBAClE,EAAA,IAAA,EACK;AACJ,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,qBAAqB,EAAE,aAAa;AACpC,wBAAA,aAAa,EAAE,QAAQ;AACvB,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,oBAAoB,EAAE,cAAc;AACpC,wBAAA,mBAAmB,EAAE,6BAA6B;qBACnD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gxFAAA,CAAA,EAAA;;AAgCjD;;;;;;;AAOG;MAYU,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,uKAR1B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAXrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,qBAAqB;AAC9B,wBAAA,aAAa,EAAE,MAAM;AACtB,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;AAOG;MAkBU,0BAA0B,CAAA;;IAE5B,OAAO,GAAG,KAAK,CAAoB,CAAC;gFAAC;uGAFnC,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAd3B;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAjBtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;AAMG;MASU,gCAAgC,CAAA;uGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,sIALjC,CAAA,wDAAA,CAA0D,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKzD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAR5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,wDAAA,CAA0D;oBACpE,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;;;;;;;;AAeG;MAmBU,4BAA4B,CAAA;AACvC;;;;;AAKG;IACM,cAAc,GAAG,KAAK,CAAC,KAAK,sFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAP5D,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,gCAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf7B;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAlBxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,wBAAwB;AACjC,wBAAA,2BAA2B,EAAE,8BAA8B;AAC5D,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC7PD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFG;MAyBU,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,6VARjB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQf,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAxB5B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,MAAM,EAAE;gCACN,oBAAoB;gCACpB,YAAY;gCACZ,YAAY;gCACZ,WAAW;gCACX,WAAW;gCACX,gBAAgB;AACjB,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,UAAU;qBAClB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA;;AAIjD;;;;;AAKG;MAkBU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbtB;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EANS,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAcX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;GAKT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA;;AAIjD;;;;;AAKG;MAaU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARrB,CAAA,6DAAA,CAA+D,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD/D,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,CAAC,EAAA,QAAA,EACZ,CAAA,6DAAA,CAA+D,EAAA,aAAA,EAE1D,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA;;AAIjD;;;;;AAKG;MAaU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARtB,CAAA,+DAAA,CAAiE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADjE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb,CAAA,+DAAA,CAAiE,EAAA,aAAA,EAE5D,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA;;AAIjD;;;;;;;;;;;;;;;;;;AAkBG;MAyBU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBtB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqBX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;GAYT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,k2FAAA,CAAA,EAAA;;;AC7MjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFG;MA8GU,qBAAqB,CAAA;;IAEvB,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;;IAG5B,UAAU,GAAG,KAAK,CAAC,IAAI,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGzD,IAAA,SAAS,GAAG,KAAK,CAAS,MAAM,CAAC,iBAAiB;kFAAC;;AAGnD,IAAA,UAAU,GAAG,KAAK,CAAS,MAAM,CAAC,iBAAiB;mFAAC;;IAGpD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,cAAc,GAAG,KAAK,CAAC,IAAI,sFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG7D,eAAe,GAAG,KAAK,CAAS,qCAAqC;wFAAC;;IAGtE,cAAc,GAAG,KAAK,CAAS,EAAE;uFAAC;;IAGlC,cAAc,GAAG,KAAK,CAAS,cAAc;uFAAC;;IAG9C,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnD,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;AACrC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAqB;AAChD,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAoB;;AAGd,IAAA,MAAM;;AAGvC,IAAA,OAAO,GAAG,CAAC,IAAU,KAAc,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG/D,IAAA,YAAY,GAAG,IAAI,GAAG,EAAkB;AAE/C,IAAA,UAAU,CAAC,CAAmB,EAAA;AACtC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;QAClC;AACA,QAAA,OAAO,GAAG;IACZ;AAEU,IAAA,UAAU,CAAC,KAAa,EAAA;QAChC,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AACrC,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAAE,YAAA,OAAO,CAAA,EAAG,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK;AACjE,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAAE,YAAA,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;AACjF,QAAA,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;IAC1D;AAEU,IAAA,WAAW,CAAC,MAAc,EAAA;QAClC,QAAQ,MAAM;AACZ,YAAA,KAAK,WAAW,EAAE,OAAO,WAAW;AACpC,YAAA,KAAK,SAAS,EAAE,OAAO,OAAO;AAC9B,YAAA,KAAK,WAAW,EAAE,OAAO,WAAW;AACpC,YAAA,KAAK,MAAM,EAAE,OAAO,MAAM;AAC1B,YAAA,KAAK,OAAO,EAAE,OAAO,OAAO;AAC5B,YAAA,KAAK,WAAW,EAAE,OAAO,WAAW;AACpC,YAAA,SAAS,OAAO,MAAM;;IAE1B;IAEA,WAAW,GAAA;QACT,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAAE,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACtE,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;;;AAIS,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;8EAAC;uGA/EhD,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoCrB,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArIb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4kIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnGC,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAmGR,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA7GjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,oBAAoB;wBACpB,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;qBAClB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACtB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4kIAAA,CAAA,EAAA;;sBAiC9C;;sBACA;;sBACA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AClP3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFG;MA0BU,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,4lBANhB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAzB3B,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,MAAM,EAAE;gCACN,gBAAgB;gCAChB,iBAAiB;gCACjB,kBAAkB;gCAClB,eAAe;gCACf,4BAA4B;gCAC5B,kBAAkB;gCAClB,eAAe;gCACf,cAAc;AACf,6BAAA;AACD,4BAAA,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,CAAC;AAC/D,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA;;AAIjD;;;;;;;;;;;;;;;AAeG;MAeU,sBAAsB,CAAA;;IAExB,OAAO,GAAG,KAAK,CAAS,cAAc;gFAAC;;IAEvC,OAAO,GAAG,KAAK,CAAyC,KAAK;gFAAC;uGAJ5D,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,ifAXvB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAWf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAdlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,iBAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,mBAAmB,EAAE,WAAW;AAChC,wBAAA,mBAAmB,EAAE,WAAW;qBACjC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA;;AASjD;;;;;;;;;;;;;;;;;;;;AAoBG;MAuBU,sBAAsB,CAAA;IAChB,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,eAAe,GAAG,MAAM,CAA6C,EAAE;wFAAC;AAEtE,IAAA,eAAe,GAAG,QAAQ,CAC3C,MAAM,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;wFAC7D;AACkB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC;gFAAC;AAEpE,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,KAAK,KAAK,CAAC,GAAG,sBAAsB,GAAG,CAAA,EAAG,KAAK,sBAAsB;IAC9E;uGAXW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBvB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,cAAA,EACA,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,cAAc,EAAE,mBAAmB,CAAC,EAAE,CAAC,EAAA,QAAA,EACxF;;;;;;;;;GAST,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,qBAAqB,EAAE,uBAAuB;qBAC/C,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA;;;AChMjD;;;;;AAKG;AACH,SAAS,gBAAgB,CAAC,GAAW,EAAA;IACnC,MAAM,OAAO,GAAG;AACb,SAAA,OAAO,CAAC,IAAI,EAAE,GAAG;AACjB,SAAA,OAAO,CAAC,QAAQ,EAAE,IAAI;AACtB,SAAA,IAAI;AACJ,SAAA,OAAO,CAAC,YAAY,EAAE,GAAG;AACzB,SAAA,OAAO,CAAC,IAAI,EAAE,KAAK;AACnB,SAAA,OAAO,CAAC,IAAI,EAAE,KAAK;AACnB,SAAA,OAAO,CAAC,KAAK,EAAE,KAAK;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,KAAK;AACnB,SAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACvB,OAAO,CAAA,6BAAA,EAAgC,OAAO,CAAA,EAAA,CAAI;AACpD;AAEA;AACA,SAAS,aAAa,CAAC,IAAY,EAAA;AACjC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,OAAO,CAAC,uBAAuB,EAAE,OAAO;AACxC,SAAA,WAAW,EAAE;AAClB;AAEA;AACA,IAAI,gBAAgB,GAAkC,IAAI;AAC1D,SAAS,mBAAmB,GAAA;AAC1B,IAAA,IAAI,gBAAgB;AAAE,QAAA,OAAO,gBAAgB;IAC7C,MAAM,OAAO,GAA2B,EAAE;IAC1C,MAAM,GAAG,GAAG,WAAgD;AAC5D,IAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE;QAC7B,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC;IACxD;IACA,gBAAgB,GAAG,OAAO;AAC1B,IAAA,OAAO,OAAO;AAChB;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCG;SACa,kBAAkB,GAAA;AAChC,IAAA,OAAO,wBAAwB,CAAC;QAC9B,6BAA6B,CAAC,MAAK;AACjC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACzC,YAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;AACH,KAAA,CAAC;AACJ;;AC/FA;AACA;AAEO,MAAM,qBAAqB,GAAsB;IACtD,cAAc;IACd,YAAY;IACZ,eAAe;IACf,eAAe;IACf,UAAU;IACV,UAAU;IACV,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,OAAO;IACP,yBAAyB;IACzB,uBAAuB;IACvB,sBAAsB;IACtB,oBAAoB;IACpB,oCAAoC;IACpC,iCAAiC;IACjC,mCAAmC;IACnC,iCAAiC;IACjC,8BAA8B;IAC9B,gCAAgC;IAChC,+BAA+B;IAC/B,gCAAgC;IAChC,wBAAwB;IACxB,sBAAsB;IACtB,kCAAkC;IAClC,+BAA+B;IAC/B,iCAAiC;IACjC,+BAA+B;IAC/B,4BAA4B;IAC5B,8BAA8B;IAC9B,6BAA6B;IAC7B,8BAA8B;IAC9B,WAAW;IACX,WAAW;IACX,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,OAAO;IACP,SAAS;IACT,SAAS;IACT,OAAO;IACP,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,OAAO;IACP,SAAS;IACT,iBAAiB;IACjB,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,qBAAqB;IACrB,gBAAgB;IAChB,qBAAqB;IACrB,iBAAiB;IACjB,sBAAsB;IACtB,cAAc;IACd,mBAAmB;IACnB,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,iBAAiB;IACjB,wBAAwB;IACxB,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,wBAAwB;IACxB,gBAAgB;IAChB,YAAY;IACZ,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,aAAa;IACb,uBAAuB;IACvB,kBAAkB;IAClB,qBAAqB;IACrB,UAAU;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,sBAAsB;IACtB,gBAAgB;IAChB,kBAAkB;IAClB,sBAAsB;IACtB,cAAc;IACd,qBAAqB;IACrB,UAAU;IACV,SAAS;IACT,SAAS;IACT,MAAM;IACN,aAAa;IACb,gBAAgB;IAChB,OAAO;IACP,KAAK;IACL,SAAS;IACT,MAAM;IACN,UAAU;IACV,OAAO;IACP,aAAa;IACb,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,YAAY;IACZ,oBAAoB;IACpB,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,eAAe;IACf,YAAY;IACZ,sBAAsB;IACtB,qBAAqB;IACrB,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,SAAS;IACT,eAAe;IACf,SAAS;IACT,KAAK;IACL,QAAQ;IACR,SAAS;IACT,UAAU;IACV,qBAAqB;IACrB,mBAAmB;IACnB,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,SAAS;IACT,kBAAkB;IAClB,cAAc;IACd,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,iBAAiB;IACjB,QAAQ;IACR,MAAM;IACN,UAAU;IACV,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,MAAM;IACN,UAAU;IACV,MAAM;IACN,UAAU;IACV,MAAM;IACN,YAAY;IACZ,UAAU;IACV,eAAe;IACf,YAAY;IACZ,UAAU;IACV,WAAW;IACX,WAAW;IACX,wBAAwB;IACxB,0BAA0B;IAC1B,sBAAsB;IACtB,wBAAwB;IACxB,eAAe;IACf,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,MAAM;IACN,WAAW;IACX,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,qBAAqB;IACrB,eAAe;IACf,qBAAqB;IACrB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,aAAa;IACb,WAAW;IACX,iBAAiB;IACjB,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,WAAW;IACX,aAAa;IACb,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,WAAW;IACX,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,YAAY;IACZ,UAAU;IACV,KAAK;IACL,oBAAoB;IACpB,SAAS;IACT,aAAa;IACb,WAAW;IACX,KAAK;IACL,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,eAAe;IACf,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,mBAAmB;IACnB,WAAW;IACX,oBAAoB;IACpB,yBAAyB;IACzB,mBAAmB;IACnB,gBAAgB;IAChB,OAAO;IACP,gBAAgB;IAChB,SAAS;IACT,KAAK;IACL,SAAS;IACT,UAAU;IACV,UAAU;IACV,YAAY;IACZ,KAAK;IACL,WAAW;IACX,OAAO;IACP,WAAW;IACX,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,qBAAqB;IACrB,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,WAAW;IACX,UAAU;IACV,cAAc;IACd,UAAU;IACV,cAAc;IACd,KAAK;IACL,WAAW;IACX,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,eAAe;IACf,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,UAAU;IACV,YAAY;IACZ,WAAW;IACX,eAAe;IACf,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,yBAAyB;IACzB,sBAAsB;IACtB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,sBAAsB;IACtB,iCAAiC;IACjC,iCAAiC;IACjC,wBAAwB;IACxB,qBAAqB;IACrB,WAAW;IACX,eAAe;IACf,cAAc;IACd,OAAO;IACP,aAAa;IACb,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,cAAc;IACd,eAAe;IACf,cAAc;IACd,cAAc;IACd,eAAe;IACf,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,qBAAqB;IACrB,8BAA8B;IAC9B,gBAAgB;IAChB,qBAAqB;IACrB,aAAa;IACb,kBAAkB;IAClB,QAAQ;IACR,WAAW;IACX,eAAe;IACf,QAAQ;IACR,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,4BAA4B;IAC5B,6BAA6B;IAC7B,0BAA0B;IAC1B,2BAA2B;IAC3B,oBAAoB;IACpB,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,mBAAmB;IACnB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,YAAY;IACZ,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,oBAAoB;IACpB,cAAc;IACd,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,aAAa;IACb,uBAAuB;IACvB,cAAc;IACd,sBAAsB;IACtB,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,UAAU;IACV,eAAe;IACf,QAAQ;IACR,cAAc;IACd,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,OAAO;IACP,aAAa;IACb,cAAc;IACd,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,UAAU;IACV,QAAQ;IACR,KAAK;IACL,OAAO;IACP,WAAW;IACX,WAAW;IACX,eAAe;IACf,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,MAAM;IACN,cAAc;IACd,SAAS;IACT,eAAe;IACf,WAAW;IACX,UAAU;IACV,QAAQ;IACR,aAAa;IACb,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,KAAK;IACL,kBAAkB;IAClB,aAAa;IACb,WAAW;IACX,MAAM;IACN,OAAO;IACP,WAAW;IACX,OAAO;IACP,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,KAAK;IACL,UAAU;IACV,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,qBAAqB;IACrB,sBAAsB;IACtB,QAAQ;IACR,SAAS;IACT,UAAU;IACV,SAAS;IACT,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,KAAK;IACL,SAAS;IACT,MAAM;IACN,KAAK;IACL,aAAa;IACb,OAAO;IACP,aAAa;IACb,oBAAoB;IACpB,WAAW;IACX,KAAK;IACL,UAAU;IACV,kBAAkB;IAClB,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,aAAa;IACb,UAAU;IACV,MAAM;IACN,WAAW;IACX,UAAU;IACV,KAAK;IACL,SAAS;IACT,OAAO;IACP,YAAY;IACZ,SAAS;IACT,KAAK;IACL,WAAW;IACX,SAAS;IACT,SAAS;IACT,UAAU;IACV,mBAAmB;IACnB,OAAO;IACP,qBAAqB;IACrB,WAAW;IACX,QAAQ;IACR,eAAe;IACf,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,eAAe;IACf,KAAK;IACL,YAAY;IACZ,SAAS;IACT,SAAS;IACT,KAAK;IACL,cAAc;IACd,SAAS;IACT,OAAO;IACP,cAAc;IACd,MAAM;IACN,cAAc;IACd,cAAc;IACd,YAAY;IACZ,UAAU;IACV,aAAa;IACb,oBAAoB;IACpB,mBAAmB;IACnB,8BAA8B;IAC9B,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,wBAAwB;IACxB,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,aAAa;IACb,UAAU;IACV,eAAe;IACf,WAAW;IACX,WAAW;IACX,kBAAkB;IAClB,oBAAoB;IACpB,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,cAAc;IACd,eAAe;IACf,WAAW;IACX,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,WAAW;IACX,mBAAmB;IACnB,aAAa;IACb,QAAQ;IACR,eAAe;IACf,OAAO;IACP,MAAM;IACN,qBAAqB;IACrB,mBAAmB;IACnB,MAAM;IACN,UAAU;IACV,aAAa;IACb,cAAc;IACd,aAAa;IACb,MAAM;IACN,UAAU;IACV,oBAAoB;IACpB,qBAAqB;IACrB,OAAO;IACP,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,mBAAmB;IACnB,aAAa;IACb,mBAAmB;IACnB,iBAAiB;IACjB,QAAQ;IACR,UAAU;IACV,OAAO;IACP,iBAAiB;IACjB,eAAe;IACf,QAAQ;IACR,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,eAAe;IACf,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;IACf,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,WAAW;IACX,UAAU;IACV,SAAS;IACT,YAAY;IACZ,UAAU;IACV,MAAM;IACN,SAAS;IACT,OAAO;IACP,OAAO;IACP,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,UAAU;IACV,oBAAoB;IACpB,wBAAwB;IACxB,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,SAAS;IACT,WAAW;IACX,qBAAqB;IACrB,OAAO;IACP,OAAO;IACP,KAAK;IACL,eAAe;IACf,OAAO;IACP,MAAM;IACN,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,uBAAuB;IACvB,qBAAqB;IACrB,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,WAAW;IACX,WAAW;IACX,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,yBAAyB;IACzB,yBAAyB;IACzB,+BAA+B;IAC/B,wBAAwB;IACxB,aAAa;IACb,SAAS;IACT,OAAO;IACP,YAAY;IACZ,WAAW;IACX,SAAS;IACT,MAAM;IACN,KAAK;IACL,gBAAgB;IAChB,OAAO;IACP,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,UAAU;IACV,UAAU;IACV,MAAM;IACN,iBAAiB;IACjB,eAAe;IACf,OAAO;IACP,QAAQ;IACR,KAAK;IACL,WAAW;IACX,QAAQ;IACR,MAAM;IACN,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,cAAc;IACd,SAAS;IACT,WAAW;IACX,YAAY;IACZ,qBAAqB;IACrB,mBAAmB;IACnB,UAAU;IACV,MAAM;IACN,aAAa;IACb,MAAM;IACN,IAAI;IACJ,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;IACf,YAAY;IACZ,SAAS;IACT,OAAO;IACP,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,YAAY;IACZ,aAAa;IACb,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,aAAa;IACb,SAAS;IACT,KAAK;IACL,SAAS;IACT,UAAU;IACV,OAAO;IACP,WAAW;IACX,OAAO;IACP,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;IAChB,SAAS;IACT,iBAAiB;IACjB,OAAO;IACP,YAAY;IACZ,aAAa;IACb,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,cAAc;IACd,UAAU;IACV,MAAM;IACN,kBAAkB;IAClB,QAAQ;IACR,eAAe;IACf,cAAc;IACd,cAAc;IACd,UAAU;IACV,QAAQ;IACR,OAAO;IACP,KAAK;IACL,WAAW;IACX,YAAY;IACZ,UAAU;IACV,gBAAgB;IAChB,cAAc;IACd,MAAM;IACN,cAAc;IACd,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,WAAW;IACX,UAAU;IACV,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,sBAAsB;IACtB,OAAO;IACP,cAAc;IACd,OAAO;IACP,QAAQ;IACR,UAAU;IACV,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,MAAM;IACN,aAAa;IACb,SAAS;IACT,cAAc;IACd,aAAa;IACb,SAAS;IACT,aAAa;IACb,WAAW;IACX,UAAU;IACV,WAAW;IACX,eAAe;IACf,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,YAAY;IACZ,aAAa;IACb,uBAAuB;IACvB,uBAAuB;IACvB,eAAe;IACf,UAAU;IACV,aAAa;IACb,kBAAkB;IAClB,sBAAsB;IACtB,sBAAsB;IACtB,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,WAAW;IACX,cAAc;IACd,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,iBAAiB;IACjB,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,MAAM;IACN,cAAc;IACd,mBAAmB;IACnB,WAAW;IACX,QAAQ;IACR,SAAS;IACT,MAAM;IACN,UAAU;IACV,SAAS;IACT,QAAQ;IACR,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,WAAW;IACX,oBAAoB;IACpB,aAAa;IACb,cAAc;IACd,QAAQ;IACR,SAAS;IACT,OAAO;IACP,KAAK;IACL,WAAW;IACX,SAAS;IACT,eAAe;IACf,sBAAsB;IACtB,eAAe;IACf,eAAe;IACf,sBAAsB;IACtB,aAAa;IACb,aAAa;IACb,cAAc;IACd,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,YAAY;IACZ,UAAU;IACV,MAAM;IACN,aAAa;IACb,SAAS;IACT,UAAU;IACV,YAAY;IACZ,OAAO;IACP,WAAW;IACX,eAAe;IACf,KAAK;IACL,cAAc;IACd,MAAM;IACN,OAAO;IACP,gBAAgB;IAChB,sBAAsB;IACtB,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,8BAA8B;IAC9B,sBAAsB;IACtB,wBAAwB;IACxB,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB;IACtB,qBAAqB;IACrB,uBAAuB;IACvB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,wBAAwB;IACxB,kBAAkB;IAClB,iBAAiB;IACjB,WAAW;IACX,KAAK;IACL,SAAS;IACT,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW;IACX,MAAM;IACN,UAAU;IACV,UAAU;IACV,YAAY;IACZ,OAAO;IACP,oBAAoB;IACpB,cAAc;IACd,SAAS;IACT,eAAe;IACf,eAAe;IACf,aAAa;IACb,aAAa;IACb,cAAc;IACd,aAAa;IACb,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,WAAW;IACX,MAAM;IACN,WAAW;IACX,WAAW;IACX,UAAU;IACV,eAAe;IACf,OAAO;IACP,YAAY;IACZ,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;IACrB,aAAa;IACb,MAAM;IACN,SAAS;IACT,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,YAAY;IACZ,SAAS;IACT,cAAc;IACd,eAAe;IACf,eAAe;IACf,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,YAAY;IACZ,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,SAAS;IACT,WAAW;IACX,KAAK;IACL,YAAY;IACZ,UAAU;IACV,cAAc;IACd,eAAe;IACf,eAAe;IACf,cAAc;IACd,qBAAqB;IACrB,KAAK;IACL,SAAS;IACT,SAAS;IACT,eAAe;IACf,eAAe;IACf,eAAe;IACf,WAAW;IACX,OAAO;IACP,QAAQ;IACR,OAAO;IACP,SAAS;IACT,SAAS;IACT,WAAW;IACX,eAAe;IACf,eAAe;IACf,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,cAAc;IACd,cAAc;IACd,YAAY;IACZ,qBAAqB;IACrB,SAAS;IACT,OAAO;IACP,cAAc;IACd,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,YAAY;IACZ,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,yBAAyB;IACzB,aAAa;IACb,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,WAAW;IACX,yBAAyB;IACzB,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,qBAAqB;IACrB,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,eAAe;IACf,cAAc;IACd,OAAO;IACP,WAAW;IACX,SAAS;IACT,KAAK;IACL,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,cAAc;IACd,UAAU;IACV,SAAS;IACT,iBAAiB;IACjB,iBAAiB;IACjB,OAAO;IACP,YAAY;IACZ,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,IAAI;IACJ,OAAO;IACP,SAAS;IACT,oBAAoB;IACpB,sBAAsB;IACtB,YAAY;IACZ,SAAS;IACT,cAAc;IACd,eAAe;IACf,MAAM;IACN,aAAa;IACb,KAAK;IACL,SAAS;IACT,SAAS;IACT,OAAO;IACP,OAAO;IACP,eAAe;IACf,eAAe;IACf,MAAM;IACN,MAAM;IACN,QAAQ;IACR,UAAU;IACV,MAAM;IACN,cAAc;IACd,SAAS;IACT,SAAS;IACT,aAAa;IACb,SAAS;IACT,UAAU;IACV,gBAAgB;IAChB,OAAO;IACP,WAAW;IACX,cAAc;IACd,SAAS;IACT,eAAe;IACf,WAAW;IACX,WAAW;IACX,aAAa;IACb,QAAQ;IACR,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,SAAS;IACT,OAAO;IACP,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,QAAQ;IACR,SAAS;IACT,KAAK;IACL,OAAO;IACP,SAAS;IACT,cAAc;IACd,cAAc;IACd,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,qBAAqB;IACrB,cAAc;IACd,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,SAAS;IACT,MAAM;IACN,QAAQ;IACR,UAAU;IACV,aAAa;IACb,iBAAiB;IACjB,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,OAAO;IACP,mBAAmB;IACnB,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;IACZ,SAAS;IACT,aAAa;IACb,OAAO;IACP,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,eAAe;IACf,gBAAgB;IAChB,MAAM;IACN,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,mBAAmB;IACnB,WAAW;IACX,kBAAkB;IAClB,OAAO;IACP,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,OAAO;IACP,sBAAsB;IACtB,eAAe;IACf,UAAU;IACV,OAAO;IACP,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,MAAM;IACN,UAAU;IACV,UAAU;IACV,OAAO;IACP,UAAU;IACV,SAAS;IACT,MAAM;IACN,cAAc;IACd,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,cAAc;IACd,aAAa;IACb,WAAW;IACX,QAAQ;IACR,UAAU;IACV,sBAAsB;IACtB,SAAS;IACT,cAAc;IACd,kBAAkB;IAClB,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,cAAc;IACd,cAAc;IACd,aAAa;IACb,cAAc;IACd,UAAU;IACV,SAAS;IACT,MAAM;IACN,iBAAiB;IACjB,cAAc;IACd,sBAAsB;IACtB,oBAAoB;IACpB,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,eAAe;IACf,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,mBAAmB;IACnB,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd,YAAY;IACZ,aAAa;IACb,sBAAsB;IACtB,aAAa;IACb,UAAU;IACV,MAAM;IACN,YAAY;IACZ,OAAO;IACP,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,QAAQ;IACR,aAAa;IACb,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,eAAe;IACf,aAAa;IACb,WAAW;IACX,UAAU;IACV,cAAc;IACd,OAAO;IACP,WAAW;IACX,cAAc;IACd,OAAO;IACP,OAAO;IACP,OAAO;IACP,oBAAoB;IACpB,kBAAkB;IAClB,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;IAChB,OAAO;IACP,YAAY;IACZ,OAAO;IACP,WAAW;IACX,wBAAwB;IACxB,MAAM;IACN,aAAa;IACb,MAAM;IACN,OAAO;IACP,OAAO;IACP,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,aAAa;IACb,eAAe;IACf,QAAQ;IACR,gBAAgB;IAChB,OAAO;IACP,OAAO;IACP,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,yBAAyB;IACzB,mBAAmB;IACnB,4BAA4B;IAC5B,6BAA6B;IAC7B,0BAA0B;IAC1B,2BAA2B;IAC3B,oBAAoB;IACpB,0BAA0B;IAC1B,yBAAyB;IACzB,iBAAiB;IACjB,sBAAsB;IACtB,uBAAuB;IACvB,iBAAiB;IACjB,+BAA+B;IAC/B,qCAAqC;IACrC,mCAAmC;IACnC,oBAAoB;IACpB,cAAc;IACd,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,mBAAmB;IACnB,aAAa;IACb,eAAe;IACf,sBAAsB;IACtB,2BAA2B;IAC3B,sBAAsB;IACtB,6BAA6B;IAC7B,oBAAoB;IACpB,yBAAyB;IACzB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,UAAU;IACV,aAAa;IACb,cAAc;IACd,sBAAsB;IACtB,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,qBAAqB;IACrB,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,yBAAyB;IACzB,uBAAuB;IACvB,eAAe;IACf,cAAc;IACd,aAAa;IACb,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,mBAAmB;IACnB,UAAU;IACV,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,OAAO;IACP,MAAM;IACN,WAAW;IACX,UAAU;IACV,WAAW;IACX,cAAc;IACd,aAAa;IACb,SAAS;IACT,aAAa;IACb,OAAO;IACP,OAAO;IACP,oBAAoB;IACpB,kBAAkB;IAClB,eAAe;IACf,WAAW;IACX,KAAK;IACL,SAAS;IACT,YAAY;IACZ,UAAU;IACV,UAAU;IACV,SAAS;IACT,QAAQ;IACR,aAAa;IACb,aAAa;IACb,aAAa;IACb,eAAe;IACf,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,QAAQ;IACR,mBAAmB;IACnB,SAAS;IACT,KAAK;IACL,MAAM;IACN,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,WAAW;IACX,MAAM;IACN,WAAW;IACX,UAAU;IACV,WAAW;IACX,oBAAoB;IACpB,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,kBAAkB;IAClB,aAAa;IACb,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,aAAa;IACb,WAAW;IACX,SAAS;IACT,aAAa;IACb,uBAAuB;IACvB,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,QAAQ;IACR,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,UAAU;IACV,SAAS;IACT,eAAe;IACf,UAAU;IACV,OAAO;IACP,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,QAAQ;IACR,WAAW;IACX,SAAS;IACT,SAAS;IACT,OAAO;IACP,UAAU;IACV,cAAc;IACd,YAAY;IACZ,eAAe;IACf,WAAW;IACX,SAAS;IACT,cAAc;IACd,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,OAAO;IACP,SAAS;IACT,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,OAAO;IACP,eAAe;IACf,aAAa;IACb,kBAAkB;IAClB,UAAU;IACV,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,QAAQ;IACR,OAAO;IACP,gBAAgB;IAChB,cAAc;IACd,WAAW;IACX,QAAQ;IACR,IAAI;IACJ,YAAY;IACZ,iBAAiB;IACjB,MAAM;IACN,cAAc;IACd,UAAU;IACV,cAAc;IACd,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;IACV,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,MAAM;IACN,YAAY;IACZ,UAAU;IACV,UAAU;IACV,WAAW;IACX,YAAY;IACZ,UAAU;IACV,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;IACd,aAAa;IACb,WAAW;IACX,QAAQ;IACR,OAAO;IACP,aAAa;IACb,UAAU;IACV,kBAAkB;IAClB,cAAc;IACd,KAAK;IACL,UAAU;IACV,OAAO;IACP,eAAe;IACf,OAAO;IACP,eAAe;IACf,OAAO;IACP,gBAAgB;IAChB,SAAS;IACT,aAAa;IACb,OAAO;IACP,WAAW;IACX,WAAW;IACX,MAAM;IACN,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;IACZ,UAAU;IACV,MAAM;IACN,QAAQ;IACR,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,MAAM;IACN,eAAe;IACf,WAAW;IACX,iBAAiB;IACjB,OAAO;IACP,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,QAAQ;IACR,SAAS;IACT,aAAa;IACb,QAAQ;IACR,cAAc;IACd,OAAO;IACP,WAAW;IACX,YAAY;IACZ,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,MAAM;IACN,iBAAiB;IACjB,MAAM;IACN,UAAU;IACV,UAAU;IACV,MAAM;IACN,QAAQ;IACR,GAAG;IACH,YAAY;IACZ,KAAK;IACL,SAAS;IACT,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,SAAS;IACT,UAAU;CACF;;AC3qDV;AACA;AACA;AACA;AACA;AACA;AAOA;;;;AAIG;AACI,MAAM,iBAAiB,GAA8B;;ACQ5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEG;MAkCU,gBAAgB,CAAA;IAClB,IAAI,GAAG,KAAK,CAAc,MAAM;6EAAC;IACjC,OAAO,GAAG,KAAK,CAAiB,SAAS;gFAAC;IAC1C,MAAM,GAAG,KAAK,CAAc,IAAI;+EAAC;IACjC,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;IACzB,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;IAC/B,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;AAGtB,IAAA,UAAU;AAEpB;;AAE0D;IACjD,WAAW,GAAG,SAAS,CAA+B,aAAa;oFAAC;;IAG7E,KAAK,GAAA;QACH,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC3C;AAEA,IAAA,UAAU,CAAC,GAAY,EAAA;QACrB,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;IAC3C;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;QAC3C,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAChD;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACjD;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC;IACxD;uGAjCW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EA7BhB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;AAC/C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgCU,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BR;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0sDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArBS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA8BN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAjC5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,CAAC,EAAA,SAAA,EACP;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,sBAAsB,CAAC;AAC/C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;GAaT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,oBAAoB;AAC7B,wBAAA,kBAAkB,EAAE,QAAQ;qBAC7B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,0sDAAA,CAAA,EAAA;;sBAW9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;2DAM2B,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC7H9E;;;;;;AAMG;MAiJU,oBAAoB,CAAA;AACZ,IAAA,KAAK,GAAG,iBAAiB,CAAC,MAAM;IAChC,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;IAClB,YAAY,GAAG,MAAM,CAAC,EAAE;qFAAC;AAEzB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,iBAAiB;AAChC,QAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;iFAAC;IAEQ,MAAM,IAAI,CAAC,IAAY,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAA,WAAA,EAAc,IAAI,QAAQ;AAC1C,QAAA,IAAI;;;YAGF,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE;gBACtE,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;YAC9C;AAAO,iBAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;gBAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AAC7C,gBAAA,EAAE,CAAC,KAAK,GAAG,OAAO;AAClB,gBAAA,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;AAC/B,gBAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC3B,gBAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AACtB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,EAAE,CAAC,MAAM,EAAE;AACX,gBAAA,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAC5B,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B;YACA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAE,CAAC;QACrD;AAAE,QAAA,MAAM;YACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAA,CAAE,CAAC;QAC7D;IACF;uGAjCW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6kEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3IS,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,2IAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA6IhE,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhJhC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAC3D,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAuF3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6kEAAA,CAAA,EAAA;;;AC/JH;;;AAGG;MAuCU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BnB;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCS,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkCd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtC9B,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,eAAe,CAAC,EAAA,QAAA,EAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0NAAA,CAAA,EAAA;;;AC3CH;AACA;;ACQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEG;MAgBU,qBAAqB,CAAA;;IAEvB,aAAa,GAAG,KAAK,CAA4B,YAAY;sFAAC;;IAG9D,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;;IAGhD,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;;IAG7C,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAXxD,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,kxBANtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,snGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAfjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,YAAY;AACvB,4BAAA,MAAM,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;AACxC,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAA,eAAA,EAChB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,snGAAA,CAAA,EAAA;;AAgBjD;;;;;;;;;;;;;;;AAeG;MAeU,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,gQAL3B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAdtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,iBAAiB;AAC5B,4BAAA,MAAM,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;AACvC,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;oBACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACjID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DG;MAyBU,oBAAoB,CAAA;;IAEtB,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAU;;IAGjC,YAAY,GAAG,KAAK,CAAyB,EAAE;qFAAC;AAEzD;;;;AAIG;IACM,UAAU,GAAG,KAAK,CAAwB,UAAU;mFAAC;;IAGrD,UAAU,GAAG,KAAK,CAAS,GAAG;mFAAC;;IAG/B,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG3D,YAAY,GAAG,KAAK,CAAS,EAAE;qFAAC;;IAGhC,UAAU,GAAG,MAAM,EAAQ;uGA9BzB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBrB;;;;;;;;;;;;;;GAcT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o5BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAfS,WAAW,+NAAE,WAAW,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqBvB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxBhC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,WAAW,CAAC,EAAA,QAAA,EACzB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,eAAe,EAAE,EAAA,eAAA,EACf,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,o5BAAA,CAAA,EAAA;;;AC3FjD;;;;AAIG;MAuEU,4BAA4B,CAAA;IAC9B,OAAO,GAAG,qBAAqB;IAE/B,eAAe,GAAG,MAAM,CAAC,EAAE;wFAAC;IAC5B,WAAW,GAAG,MAAM,CAAC,EAAE;oFAAC;IACxB,QAAQ,GAAG,MAAM,CAAC,EAAE;iFAAC;AAErB,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAA+B,QAAQ,CAAC;AACxE,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA+B,KAAK,CAAC;uGARhE,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/B7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,okBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjES,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,qDAAE,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAmEhE,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAtExC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,cACjC,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,EAAA,eAAA,EAmC3D,uBAAuB,CAAC,KAAK,EAAA,QAAA,EACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,okBAAA,CAAA,EAAA;AASuE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,QAAQ,kEACX,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnF5E;;;;;;AAMG;MAoEU,8BAA8B,CAAA;IAChC,GAAG,GAAG,MAAM,CAAC,SAAS;4EAAC;;AAGvB,IAAA,SAAS,GAA2B;AAC3C,QAAA,CAAC,EAAE,aAAa;KACjB;uGANU,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlB/B;;;;;;;;;;;;;;;;GAgBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4tBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7DC,WAAW,+sBACX,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,oBAAoB,0DACpB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FA2DZ,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAnE1C,SAAS;+BACE,qCAAqC,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,WAAW;wBACX,gBAAgB;wBAChB,oBAAoB;wBACpB,qBAAqB;qBACtB,EAAA,eAAA,EAuCgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EACpC;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4tBAAA,CAAA,EAAA;;;ACxEH;;;AAGG;MAiDU,sBAAsB,CAAA;IACxB,OAAO,GAAG,qBAAqB;IAC/B,IAAI,GAAG,MAAM,CAAC,EAAE;6EAAC;uGAFf,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATvB;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,okBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1CC,WAAW,+sBACX,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,oBAAoB,0DACpB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAwCZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhDlC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,WAAW;wBACX,gBAAgB;wBAChB,oBAAoB;wBACpB,qBAAqB;qBACtB,EAAA,eAAA,EA6BgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EACpC;;;;;;;AAOT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,okBAAA,CAAA,EAAA;;;AClDH;;;;AAIG;MAiDU,kBAAkB,CAAA;IACpB,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;uGADhB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATnB;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,okBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1CC,WAAW,+sBACX,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,2DACrB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAwCX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhD9B,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,WAAW;wBACX,gBAAgB;wBAChB,qBAAqB;wBACrB,oBAAoB;qBACrB,EAAA,eAAA,EA6BgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EACpC;;;;;;;AAOT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,okBAAA,CAAA,EAAA;;;ACpDH;;;AAGG;MAgCU,uBAAuB,CAAA;IACzB,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;IAClB,IAAI,GAAG,MAAM,CAAC,EAAE;6EAAC;IACjB,IAAI,GAAG,MAAM,CAAC,EAAE;6EAAC;uGAHf,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBxB;;;;;;;;;;;;;;;;;;GAkBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzBS,oBAAoB,4MAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA2BhC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA/BnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAAA,QAAA,EAOlC;;;;;;;;;;;;;;;;;;AAkBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uRAAA,CAAA,EAAA;;;AC3BH;;;;;;AAMG;MA6DU,4BAA4B,CAAA;AAC9B,IAAA,SAAS,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;uGADpD,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvB7B;;;;;;;;;;;;;;;;;;;;;GAqBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ugBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtDC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,qDAChB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAmDZ,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA5DxC,SAAS;+BACE,kCAAkC,EAAA,UAAA,EAChC,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,WAAW;wBACX,gBAAgB;wBAChB,qBAAqB;wBACrB,oBAAoB;wBACpB,qBAAqB;qBACtB,EAAA,eAAA,EA0BgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EACpC;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ugBAAA,CAAA,EAAA;;;AC3EH;AACA;;ACiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MA4CU,mBAAmB,CAAA;;;IAIrB,QAAQ,GAAG,KAAK,CAAS,CAAC;iFAAC;;IAG3B,SAAS,GAAG,KAAK,CAAqC,QAAQ;kFAAC;;IAG/D,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGtD,YAAY,GAAG,KAAK,CAAC,KAAK,oFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE;;AAEG;IACM,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;AAExC;;;;AAIG;IACM,gBAAgB,GAAG,KAAK,CAAoB,EAAE;yFAAC;;;IAK/C,UAAU,GAAG,MAAM,EAAU;;IAG7B,QAAQ,GAAG,MAAM,EAAU;;;AAKnB,IAAA,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;;IAG7C,QAAQ,GAAG,QAAQ,CAAC,MAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;iFACrD;;IAGO,aAAa,GAAkB,IAAI;IACnC,gBAAgB,GAAmC,IAAI;IACvD,iBAAiB,GAAwB,IAAI;IAC7C,gBAAgB,GAAmB,IAAI;IACvC,UAAU,GAAG,KAAK;IAE1B,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ;AACjC,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;AACpE,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAA0C,CAAC;AAC1G,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACnF,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAClF;;AAIA,IAAA,UAAU,CAAC,KAAoB,EAAA;AAC7B,QAAA,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QACxB;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAyB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAA4B,CAAC;QACrE;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;QAC5B;IACF;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5C;aAAO;AACL,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC7B;IACF;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC;QACnD;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;QACpC;IACF;uGAvGW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAvCnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgF0C,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/E3C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+yDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlCS,UAAU,+NAAE,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAwCzB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA3C/B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,EAAE,cAAc,CAAC,EAAA,SAAA,EAC1B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,cAAc,EAAE,EAAA,eAAA,EACd,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+yDAAA,CAAA,EAAA;0kCAiDJ,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACvLvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFG;MAiBU,cAAc,CAAA;;IAEhB,MAAM,GAAG,KAAK,CAA4B,IAAI;+EAAC;AAExD;;;;;;;;;;AAUG;IACM,cAAc,GAAG,KAAK,CAAqB,SAAS;uFAAC;uGAfnD,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAFd,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV5D,CAAA;;;;;AAKY,uBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ywCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EANZ,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAaJ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhB1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAQ,cACN,IAAI,EAAA,OAAA,EACP,CAAC,KAAK,CAAC,EAAA,QAAA,EACN,CAAA;;;;;wBAKY,EAAA,aAAA,EAEP,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAA,MAAA,EAAA,CAAA,ywCAAA,CAAA,EAAA;;;ACrFxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EG;MA4CU,kBAAkB,CAAA;;IAEpB,aAAa,GAAG,KAAK,CAAuB,YAAY;sFAAC;AAElE;;;;AAIG;IACM,YAAY,GAAG,KAAK,CAAU,KAAK;qFAAC;;IAGpC,OAAO,GAAG,KAAK,CAAiB,QAAQ;gFAAC;;IAGzC,SAAS,GAAG,KAAK,CAAgC,OAAO;kFAAC;;IAGzD,MAAM,GAAG,KAAK,CAAqB,IAAI;+EAAC;AAEjD;;;;;AAKG;IACc,YAAY,GAAG,SAAS,CAA0B,cAAc;qFAAC;AAElF;;;;;;;;;;;;;;;;;AAiBG;IACgB,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;IACtB,UAAU,GAAG,MAAM,CAAC,IAAI;mFAAC;AAE5C;;;AAGG;IACc,iBAAiB,GAAG,eAAe,CAAC,GAAG,yFAAI,WAAW,EAAE,KAAK,EAAA,CAAG;AAEjF,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;YACnB,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;YAChD,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACjE,YAAA,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;AAC9E,YAAA,MAAM,OAAO,GACX,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC;AACrF,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,4BAA4B,CAAC,KAAkB,EAAA;AACrD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;AAAE,gBAAA,OAAO,IAAI;YACpD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;AACpC,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,IAAI;YACzC;QACF;AACA,QAAA,OAAO,KAAK;IACd;uGA/EW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAXlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AACxD,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,GAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArCS;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u+EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxBS,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAwCR,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA3C9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,SAAS,CAAC,EAAA,QAAA,EACV;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;AACtE,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AACxD,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,u+EAAA,CAAA,EAAA;AA4BkE,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,cAAc,iFA2B5B,GAAG,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC7LlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EG;MA0BU,eAAe,CAAA;;IAEjB,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;;IAG7C,QAAQ,GAAG,KAAK,CAA+D,SAAS;iFAAC;;IAGzF,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;;IAGlD,SAAS,GAAG,KAAK,CAAS,SAAS;kFAAC;;IAGpC,MAAM,GAAG,KAAK,CAAS,SAAS;+EAAC;;IAGjC,WAAW,GAAG,KAAK,CAA8B,OAAO;oFAAC;;IAGzD,UAAU,GAAG,KAAK,CAAC,KAAK;mFAAC;;IAGzB,UAAU,GAAG,KAAK,CAAC,KAAK;mFAAC;uGAvBvB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBhB;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gvFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhBS,MAAM,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAsBL,eAAe,EAAA,UAAA,EAAA,CAAA;kBAzB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,OAAA,EACP,CAAC,MAAM,CAAC,EAAA,QAAA,EACP;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gvFAAA,CAAA,EAAA;;;AChGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGG;MA4BU,eAAe,CAAA;AAC1B;;;;;;AAMG;IACM,EAAE,GAAG,KAAK,CAAW,IAAI;2EAAC;;IAG1B,WAAW,GAAG,KAAK,CAAoB,UAAU;oFAAC;;IAGlD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGvD,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,eAAe,GAAG,KAAK,CAAC,KAAK,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG/D,IAAI,GAAG,KAAK,CAAC,IAAI,4EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGnD,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;;IAGhD,cAAc,GAAG,KAAK,CAAqB,SAAS;uFAAC;AAE9D;;;;;;;AAOG;AACgB,IAAA,QAAQ,GAAG,QAAQ,CAAgB,MACpD,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,MAAM;iFAC5C;uGAzCU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,g/CAXhB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4lGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAWf,eAAe,EAAA,UAAA,EAAA,CAAA;kBA3B3B,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,MAAM,EAAE;gCACN,UAAU;gCACV,4BAA4B;gCAC5B,oBAAoB;gCACpB,wBAAwB;gCACxB,oCAAoC;gCACpC,kBAAkB;AACnB,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,SAAS;AAClB,wBAAA,aAAa,EAAE,YAAY;AAC3B,wBAAA,mBAAmB,EAAE,qBAAqB;AAC1C,wBAAA,wBAAwB,EAAE,0BAA0B;qBACrD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4lGAAA,CAAA,EAAA;;AA8CjD;;;;;;;;;;;;;;;AAeG;MAeU,mBAAmB,CAAA;AAC9B;;;;;AAKG;IACM,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/D;;;;AAIG;IACM,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAdtD,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,meALpB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAd/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,MAAM,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;AACrD,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;oBAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACrMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEG;MA4BU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+SARnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kmDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA3B9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,cAAA,EAMA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,MAAM,EAAE;gCACN,QAAQ;gCACR,gBAAgB;gCAChB,uBAAuB;gCACvB,aAAa;AACd,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,YAAY;qBACtB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,kmDAAA,CAAA,EAAA;;AAWjD;;;;;;;;;;;;AAYG;MAqBU,sBAAsB,CAAA;;IAExB,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE1D,UAAU,GAAG,MAAM,EAAQ;uGAJzB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBvB;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kmDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiBZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,CAAC,EAAA,QAAA,EACd;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,kmDAAA,CAAA,EAAA;;;ACvIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EG;MAgEU,sBAAsB,CAAA;;IAExB,OAAO,GAAwB,KAAK,CAAS,CAAC;gFAAC;AAExD;;AAEe;IACN,WAAW,GAAG,SAAS,CAA+B,aAAa;oFAAC;;IAG7E,KAAK,GAAA;QACH,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC3C;AAES,IAAA,KAAK,GAAG,KAAK,CAAS,MAAM,CAAC,iBAAiB;8EAAC;AAC/C,IAAA,KAAK,GAAG,KAAK,CAAS,MAAM,CAAC,iBAAiB;8EAAC;IAC/C,MAAM,GAAG,KAAK,CAAS,CAAC;+EAAC;IACzB,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;IAE7B,YAAY,GAAG,KAAK,CAAC,IAAI,oFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC3D,eAAe,GAAG,KAAK,CAAC,IAAI,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC9D,eAAe,GAAG,KAAK,CAAC,IAAI,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC9D,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC1D,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC1D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACzD,iBAAiB,GAAG,KAAK,CAAC,KAAK,yFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEjE,QAAQ,GAAG,KAAK,CAA8C,SAAS;iFAAC;IACxE,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;IAC5B,UAAU,GAAG,KAAK,CAAS,EAAE;mFAAC;IAC9B,iBAAiB,GAAG,KAAK,CAA8C,QAAQ;0FAAC;IAChF,MAAM,GAAG,KAAK,CAAS,EAAE;+EAAC;IAC1B,aAAa,GAAG,KAAK,CAA8B,OAAO;sFAAC;IAC3D,aAAa,GAAG,KAAK,CAAC,IAAI,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC5D,uBAAuB,GAAG,KAAK,CAAS,CAAC;gGAAC;IAC1C,uBAAuB,GAAG,KAAK,CAAS,CAAC;gGAAC;IAE1C,aAAa,GAAG,KAAK,CAAS,EAAE;sFAAC;IACjC,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAG/B,eAAe,GAAG,KAAK,CAAyB,UAAU;wFAAC;AAEpE;AACgF;IACvE,MAAM,GAAG,KAAK,CAA4B,IAAI;+EAAC;;IAG/C,gBAAgB,GAAG,KAAK,CAAS,gBAAgB;yFAAC;;IAGlD,gBAAgB,GAAG,KAAK,CAAS,gBAAgB;yFAAC;uGAnDhD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6tGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtDS,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA4DjD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA/DlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,kBAAkB,EAAE,eAAe,CAAC,EAAA,QAAA,EACnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6tGAAA,CAAA,EAAA;qNASgB,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACrJ9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFG;MA0CU,uBAAuB,CAAA;;AAEf,IAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEjD;;;;AAIG;IACM,OAAO,GAAG,KAAK,CAAyB,IAAI;gFAAC;AAEtD;;;;AAIG;IACM,UAAU,GAAG,KAAK,CAAgB,EAAE;mFAAC;AAE9C;;;;AAIG;IACM,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGhC,SAAS,GAAG,KAAK,CAAiB,SAAS;kFAAC;;IAG5C,MAAM,GAAG,KAAK,CAAqB,IAAI;+EAAC;AAEjD;;;AAGG;AACM,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AAAE,YAAA,OAAO,EAAE;AAC7B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;QACxB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,EAAE;AACxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;QAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG;YAAE,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG;AACtE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB,CAAC;qFAAC;AAEF;;;;AAIG;AACM,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AAAE,YAAA,OAAO,KAAK;AAChC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;QACxB,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;IAClD,CAAC;uFAAC;uGAtDS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,gCAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1BxB;;;;;;;;;;;;;;;;;GAiBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q9EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlBS,qBAAqB,oEAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA2BtC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzCnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,cAAc;AACzB,4BAAA,MAAM,EAAE;gCACN,wBAAwB;gCACxB,cAAc;gCACd,4BAA4B;gCAC5B,8BAA8B;AAC/B,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EACxC;;;;;;;;;;;;;;;;;GAiBT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,yBAAyB;AAClC,wBAAA,oBAAoB,EAAE,8BAA8B;qBACrD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,q9EAAA,CAAA,EAAA;;AA2DjD;;;;;;;;;;;AAWG;MAiBU,8BAA8B,CAAA;;IAEhC,MAAM,GAAG,KAAK,CAAqB,IAAI;+EAAC;uGAFtC,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,sbAT/B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q9EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAhB1C,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,cAAA,EACA;wBACd,qBAAqB;wBACrB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,2BAA2B,CAAC,EAAE;AAC9D,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,kBAAkB;AAC3B,wBAAA,kBAAkB,EAAE,UAAU;qBAC/B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,q9EAAA,CAAA,EAAA;;;AC9MjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGG;MAwBU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,uYANtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+1GAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAvBjC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,YAAY;AACvB,4BAAA,MAAM,EAAE;gCACN,QAAQ;gCACR,cAAc;gCACd,gBAAgB;gCAChB,iBAAiB;gCACjB,WAAW;gCACX,QAAQ;AACT,6BAAA;4BACD,OAAO,EAAE,CAAC,cAAc,CAAC;AAC1B,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,eAAe,EAAE,EAAA,eAAA,EACf,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+1GAAA,CAAA,EAAA;;AAIjD;;;;;;;;AAQG;MAsBU,yBAAyB,CAAA;;IAE3B,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAU;;IAEjC,UAAU,GAAG,KAAK,CAAU,KAAK;mFAAC;IAClC,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;uGAN3C,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjB1B;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAkBf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAUD;;;;;;;AAOG;MAoBU,6BAA6B,CAAA;IAC/B,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;uGAF3C,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf9B;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAnBzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;AAOG;MAoBU,yBAAyB,CAAA;IAC3B,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;uGAF3C,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf1B;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;AAOG;MAoBU,0BAA0B,CAAA;IAC5B,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;uGAF3C,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf3B;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBhB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnBtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;AAOG;MAoBU,yBAAyB,CAAA;IAC3B,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;uGAF3C,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf1B;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;;AAQG;MAUU,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,gMAL9B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,oBAAoB,CAAC;AACtC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;oBACzC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAUU,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,oLAL1B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,gBAAgB,CAAC;AAClC,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;;;;;;;;;;AAiBG;MAiDU,4BAA4B,CAAA;AACvC;;;;AAIG;IACM,MAAM,GAAwB,KAAK,CAAS,CAAC;+EAAC;IAC9C,YAAY,GAAG,KAAK,CAAC,QAAQ;qFAAU;IACvC,cAAc,GAAG,KAAK,CAAS,CAAC;uFAAC;IACjC,eAAe,GAAG,KAAK,CAAS,CAAC;wFAAC;IAClC,SAAS,GAAG,KAAK,CAAS,SAAS;kFAAC;IACpC,MAAM,GAAG,KAAK,CAAS,IAAI;+EAAC;;IAE5B,eAAe,GAAG,KAAK,CAAU,IAAI;wFAAC;;IAEtC,UAAU,GAAG,KAAK,CAAU,KAAK;mFAAC;uGAfhC,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9QU,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAgCrB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAoCzB,6BAA6B,oGAgC7B,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAgCzB,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAgC1B,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAuBzB,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAoB7B,yBAAyB,+DAgClC,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoCN,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAhDxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,qBAAqB;wBACrB,yBAAyB;wBACzB,6BAA6B;wBAC7B,yBAAyB;wBACzB,0BAA0B;wBAC1B,yBAAyB;wBACzB,6BAA6B;wBAC7B,yBAAyB;wBACzB,eAAe;AAChB,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACtYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFG;MAqEU,wBAAwB,CAAA;AACnC;;;;AAIG;IACM,cAAc,GAAG,KAAK,CAAyB,kBAAkB;uFAAC;;AAGlE,IAAA,WAAW,GAAG,KAAK,CAAS,MAAM,CAAC,iBAAiB;oFAAC;;IAGrD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,UAAU,GAAG,KAAK,CAAU,KAAK;mFAAC;;IAGlC,aAAa,GAAG,KAAK,CAAS,EAAE;sFAAC;;IAGjC,OAAO,GAAG,KAAK,CAAS,EAAE;gFAAC;;IAG3B,YAAY,GAAG,KAAK,CAAC,IAAI,oFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG3D,cAAc,GAAG,KAAK,CAAC,KAAK,sFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG9D,qBAAqB,GAAG,KAAK,CAAC,KAAK,6FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGrE,WAAW,GAAG,KAAK,CAAS,eAAe;oFAAC;;IAG5C,WAAW,GAAG,KAAK,CAAS,eAAe;oFAAC;;IAG5C,iBAAiB,GAAG,KAAK,CAAS,kBAAkB;0FAAC;;AAG3C,IAAA,OAAO,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;;AAG5D,IAAA,KAAK,GAAG,QAAQ,CAAkB,MAAK;;;;;AAKxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC;IAC1B,CAAC;8EAAC;AAEF;;;;;AAKG;IACc,IAAI,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAErE,IAAA,WAAA,GAAA;;QAEE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC7D;IACF;uGA1EW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvDzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y7HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1DC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,eAAe,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,0IAClB,yBAAyB,EAAA,QAAA,EAAA,6BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAyDhB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBApEpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,mBAAmB;wBACnB,QAAQ;wBACR,eAAe;wBACf,oBAAoB;wBACpB,gBAAgB;wBAChB,kBAAkB;wBAClB,yBAAyB;qBAC1B,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACtB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y7HAAA,CAAA,EAAA;;;AC9JjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEG;MAWU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sHANnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o6EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,EAAA,QAAA,EACnF,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,o6EAAA,CAAA,EAAA;;;ACnFjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EG;MA0BU,sBAAsB,CAAA;AACjC;;;;;AAKG;IACM,OAAO,GAAG,KAAK,CAAS,CAAC;gFAAC;;IAG1B,KAAK,GAAG,KAAK,CAAS,CAAC;8EAAC;;IAGxB,KAAK,GAAG,KAAK,CAAS,GAAG;8EAAC;AAEnC;;;AAGG;IACM,eAAe,GAAG,KAAK,CAAS,EAAE;wFAAC;AAE5C;;;AAGG;IACM,SAAS,GAAG,KAAK,CAAS,SAAS;kFAAC;AAE7C;;;AAGG;IACM,MAAM,GAAG,KAAK,CAAS,IAAI;+EAAC;AAErC;;;;AAIG;IACM,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAG/B,gBAAgB,GAAG,KAAK,CAAS,EAAE;yFAAC;uGAzClC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBvB;;;;;;;;;;;;;;;GAeT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4wEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhBS,aAAa,mJAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAsB/B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAzBlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAA,QAAA,EACjC;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACtB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4wEAAA,CAAA,EAAA;;;AC3GjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DG;MAeU,qBAAqB,CAAA;IACvB,WAAW,GAAG,KAAK,CAA4B,UAAU;oFAAC;IAC1D,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;uGAF9C,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,umBAVtB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oxCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAdjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,cAAA,EACA,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,4BAA4B,CAAC,EAAE,CAAC,EAAA,QAAA,EACxG,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,mBAAmB,EAAE,aAAa;qBACnC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,oxCAAA,CAAA,EAAA;;AAOjD,IAAI,cAAc,GAAG,CAAC;AAEtB;;;;;;;;;;AAUG;MA8BU,gBAAgB,CAAA;IAClB,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAW;IACjC,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;AAEb,IAAA,OAAO,GAAG,CAAA,SAAA,EAAY,EAAE,cAAc,EAAE;AAE1C,IAAA,GAAG,GAAG,SAAS,CAAC,QAAQ,CAA0B,KAAK,CAAC;AAEzE;AAC4D;AAClD,IAAA,YAAY,CAAC,CAAa,EAAA;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc;QAC/B,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE;QAChD,KAAK,CAAC,KAAK,EAAE;IACf;uGAhBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBjB;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlBS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA0BN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA7B5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;AAClB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,UAAU;AACnB,wBAAA,sBAAsB,EAAE,wBAAwB;AACjD,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;0PAOoE,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChI1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEG;MA2BU,iBAAiB,CAAA;IACnB,WAAW,GAAG,KAAK,CAAS,SAAS;oFAAC;IACtC,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAA4B,IAAI;+EAAC;AAEvC,IAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE1C;;;;;AAKG;AACM,IAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;;IAG1C,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;AAEA;;;;;;AAMyB;IACR,OAAO,GAAG,eAAe,CACxC,UAAU,CAAC,MAAM,iBAAiB,CAAwC;gFAC3E;AAED;AACyE;AACjE,IAAA,QAAQ,CAAC,CAAU,EAAA;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAChC,YAAA,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE;AAC7B,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE;AAC9B,gBAAA,OAAO,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC;YAC9B;QACF;AACA,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB;AAES,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QAC7B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;AACxE,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,CAAC,MAAM,KAAK;AAClB,kBAAE,IAAI,CAAC,WAAW;kBAChB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACvD;AACA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzB,CAAC;qFAAC;uGArDS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,qCAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MA6BT,iBAAiB,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhD1B;;;;;;;;GAQT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g3DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EATS,eAAe,mIAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoB/B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA1B7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,cAAA,EACA;AACd,wBAAA,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC,kCAAkC,CAAC,EAAE;AACzG,qBAAA,EAAA,OAAA,EACQ,CAAC,eAAe,EAAE,eAAe,CAAC,EAAA,QAAA,EACjC;;;;;;;;GAQT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,WAAW;AACpB,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,kBAAkB,EAAE,qCAAqC;qBAC1D,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g3DAAA,CAAA,EAAA;AA+B7C,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,UAAU,CAAC,MAAM,iBAAiB,CAAwC,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA2B9E;;;;AAIG;MAUU,iBAAiB,CAAA;IACnB,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAW;AAE1C;;;AAGgD;IACvC,OAAO,GAAG,KAAK,CAAS,EAAE;gFAAC;uGAPzB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALlB,CAAA,0GAAA,CAA4G,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD5G,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,QAAQ,CAAC;AACnB,oBAAA,QAAQ,EAAE,CAAA,0GAAA,CAA4G;oBACtH,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACnKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MAiCU,mBAAmB,CAAA;AAC9B;;;AAGG;IACM,eAAe,GAAG,KAAK,CAAkB,WAAW;wFAAC;AAE9D;;;AAGG;IACM,mBAAmB,GAAG,KAAK,CAAsB,SAAS;4FAAC;;IAG3D,OAAO,GAAG,KAAK,CAAqB,SAAS;gFAAC;;IAG9C,QAAQ,GAAG,KAAK,CAAqB,SAAS;iFAAC;AAExD;;;;AAIG;IACM,OAAO,GAAG,KAAK,CAAS,CAAC;gFAAC;;IAGhB,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,YAAY;oFAAC;AAExF;;;AAGG;AACgB,IAAA,UAAU,GAAG,QAAQ,CAAoB,MAAK;AAC/D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAa,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;QAC5D;AACA,QAAA,OAAO,MAAM;IACf,CAAC;mFAAC;uGAxCS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtBpB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gxDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAuBT,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhC/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,UAAU;AACrB,4BAAA,MAAM,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;AACnD,yBAAA;qBACF,EAAA,OAAA,EACQ,CAAC,UAAU,CAAC,EAAA,QAAA,EACX;;;;;;;;;;;;GAYT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,eAAe,EAAE,WAAW;AAC5B,wBAAA,gBAAgB,EAAE,YAAY;qBAC/B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gxDAAA,CAAA,EAAA;;;AC/FjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEG;MAqFU,iBAAiB,CAAA;;IAEnB,OAAO,GAAG,KAAK,CAAS,CAAC;gFAAC;;IAG1B,OAAO,GAAG,KAAK,CAAwC,SAAS;gFAAC;IAEjE,KAAK,GAAG,KAAK,CAAS,CAAC;8EAAC;IACxB,KAAK,GAAG,KAAK,CAAS,GAAG;8EAAC;IAC1B,MAAM,GAAG,KAAK,CAAS,CAAC;+EAAC;IACzB,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;IAC7B,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;IAE7B,aAAa,GAAG,KAAK,CAA4B,YAAY;sFAAC;IAC9D,WAAW,GAAG,KAAK,CAAyB,MAAM;oFAAC;IACnD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE1D,aAAa,GAAG,KAAK,CAAS,CAAC;sFAAC;IAChC,iBAAiB,GAAG,KAAK,CAAC,KAAK,yFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEjE,OAAO,GAAG,KAAK,CAAqC,KAAK;gFAAC;IAE1D,aAAa,GAAG,KAAK,CAC5B,CAAC,KAAa,KAAK,MAAM,CAAC,KAAK,CAAC;sFACjC;IAEQ,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC1D,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAG/B,gBAAgB,GAAG,KAAK,CAAS,SAAS;yFAAC;;IAG3C,cAAc,GAAG,KAAK,CAAS,SAAS;uFAAC;;IAG/B,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS;gFAAC;AAEtD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;oFAAC;AAC5D,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;iFAAC;AAC9D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;kFAAC;;AAG/D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG;QACvB,IAAI,KAAK,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE;QAEzB,IAAI,MAAM,GAAa,EAAE;QACzB,IAAI,CAAC,KAAK,KAAK;YAAE,MAAM,GAAG,EAAE;AACvB,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;aACrC,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;YAC1C,IAAI,KAAK,GAAG,GAAG;AAAE,gBAAA,OAAO,EAAE;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAC7D;AACA,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YACtB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK;YACzB,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,QAAQ;AAAE,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;AAClC,QAAA,CAAC,CAAC;IACJ,CAAC;sFAAC;uGAtES,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhFlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,opHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3ES,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,yFAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiFpD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApF7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,QAAA,EACtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,opHAAA,CAAA,EAAA;;;ACpJjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFG;MAyBU,oBAAoB,CAAA;;IAEtB,UAAU,GAAG,KAAK,CAAsB,cAAc;mFAAC;uGAFrD,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,mhBATrB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxBhC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,WAAW;AACtB,4BAAA,MAAM,EAAE;gCACN,aAAa;gCACb,QAAQ;gCACR,YAAY;gCACZ,eAAe;AAChB,6BAAA;4BACD,OAAO,EAAE,CAAC,cAAc,CAAC;AAC1B,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,sBAAsB,EAAE,cAAc;qBACvC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA;;AAOjD;;;;;;;;;;AAUG;MA2BU,2BAA2B,CAAA;;IAE7B,SAAS,GAAG,KAAK,CAAC,SAAS;kFAAC;;IAE5B,MAAM,GAAG,KAAK,CAAC,IAAI;+EAAC;;IAEpB,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE1D,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;uGARhD,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtB5B;;;;;;;;;;;;;GAaT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAdS,QAAQ,sJAAE,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAuB3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA1BvC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAC7B;;;;;;;;;;;;;GAaT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,4BAA4B;AACnC,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA;;AAajD;;;;;;;;;;AAUG;MAWU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,4LAN5B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,cAAA,EACA,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAC1B,gBAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAA,eAAA,EACvB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA;;AAIjD;;;;;;;;;;AAUG;MA4BU,0BAA0B,CAAA;;IAE5B,SAAS,GAAG,KAAK,CAAC,SAAS;kFAAC;;IAE5B,MAAM,GAAG,KAAK,CAAC,IAAI;+EAAC;;IAEpB,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE1D,iBAAiB,GAAG,KAAK,CAAC,IAAI,yFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEhE,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;uGAVhD,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvB3B;;;;;;;;;;;;;;GAcT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAfS,QAAQ,sJAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAwB1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA3BtC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAC5B;;;;;;;;;;;;;;GAcT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,2BAA2B;AAClC,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4iHAAA,CAAA,EAAA;;;ACtOjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFG;MA8BU,kBAAkB,CAAA;AAC7B;;;;AAIG;IACM,SAAS,GAAG,KAAK,CAAS,SAAS;kFAAC;AAE7C;;;;AAIG;IACM,MAAM,GAAG,KAAK,CAAS,IAAI;+EAAC;AAErC;;;;AAIG;IACM,WAAW,GAAG,KAAK,CAAqB,MAAM;oFAAC;AAExD;;;;;AAKG;IACM,WAAW,GAAG,KAAK,CAAS,SAAS;oFAAC;AAE9B,IAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAEjE;;;;;;AAMG;AACc,IAAA,qBAAqB;AAEtC;;;;;;;;AAQG;IACgB,uBAAuB,GAAG,QAAQ,CACnD,MAAM,CAAC,IAAI,CAAC,qBAAqB;gGAClC;AAED,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,qBAAqB;YACxB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC;IACzD;uGAzDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfnB;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhBS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA0Bf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA7B9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,CAAC,EAAA,cAAA,EACX;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;;;;;AAKpB,4BAAA,MAAM,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;AACvC,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;GAKT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,qBAAqB,EAAE,aAAa;AACpC,wBAAA,kBAAkB,EAAE,UAAU;qBAC/B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6oHAAA,CAAA,EAAA;;;ACjHjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFG;MA2BU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,gcATnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,soHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA1B9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,MAAM,EAAE;gCACN,cAAc;gCACd,UAAU;gCACV,eAAe;gCACf,QAAQ;gCACR,mBAAmB;gCACnB,mBAAmB;AACpB,6BAAA;4BACD,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAChC,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,IAAI,EAAE,MAAM;qBACb,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,soHAAA,CAAA,EAAA;;AAIjD;;;;;;;AAOG;MAqBU,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,oUALhB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,MAAM,EAAE;gCACN,iBAAiB;gCACjB,aAAa;gCACb,gBAAgB;gCAChB,gBAAgB;gCAChB,WAAW;AACZ,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;AAMG;MAUU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALrB,CAAA,gFAAA,CAAkF,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADlF,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,WAAW,CAAC;AACtB,oBAAA,QAAQ,EAAE,CAAA,gFAAA,CAAkF;oBAC5F,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;AAMG;MAUU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALvB,CAAA,wEAAA,CAA0E,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD1E,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,aAAa,CAAC;AACxB,oBAAA,QAAQ,EAAE,CAAA,wEAAA,CAA0E;oBACpF,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;AAKG;MAUU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALvB,CAAA,6GAAA,CAA+G,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD/G,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,aAAa,CAAC;AACxB,oBAAA,QAAQ,EAAE,CAAA,6GAAA,CAA+G;oBACzH,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;AAMG;MAUU,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAL3B,CAAA,qHAAA,CAAuH,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADvH,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMhB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBATtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,QAAQ,EAAE,CAAA,qHAAA,CAAuH;oBACjI,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;AAKG;MAUU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALxB,CAAA,+GAAA,CAAiH,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADjH,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMb,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,cAAc,CAAC;AACzB,oBAAA,QAAQ,EAAE,CAAA,+GAAA,CAAiH;oBAC3H,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC9ND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;MAMU,cAAc,CAAA;;IAEhB,OAAO,GAAG,KAAK,CAAC,QAAQ;gFAAU;;IAElC,cAAc,GAAG,KAAK,CAAS,EAAE;uFAAC;;IAElC,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;IAErB,IAAI,GAAG,MAAM,EAAC,UAAuB,EAAC,CAAC,aAA4B;AACnE,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAExC,WAAW,GAAiD,IAAI;;IAGvD,YAAY,GAAG,MAAM,CAAgB,EAAE;qFAAC;IACxC,UAAU,GAAG,MAAM,CAAS,CAAC;mFAAC;IAC9B,WAAW,GAAG,MAAM,CAAS,CAAC;oFAAC;IAC/B,cAAc,GAAG,MAAM,CAAS,CAAC;uFAAC;;AAG1C,IAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;;AAE5C,IAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;AAExC,IAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;;AAE1C,IAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAEzD,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;;;QAInC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW;AAC1B,YAAA,IAAI,CAAC,CAAC;gBAAE;YACR,CAAC,CAAC,UAAU,CAAC;gBACX,GAAG,CAAC,CAAC,OAAO;gBACZ,KAAK;AACL,gBAAA,YAAY,EAAE,MAAM,QAAQ;gBAC5B,QAAQ;AACT,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,EAAE;AACb,QAAA,CAAC,CAAC;IACJ;IAEQ,KAAK,GAAA;;;;;;;;;;QAUX,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB;eAC/B,IAAI,CAAC,kBAAkB;eACvB,IAAI,CAAC,IAAI;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,WAAW,CAA2B;AAClD,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,gBAAgB,EAAE,MAAM,QAAQ;AAChC,YAAA,YAAY,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;AACzC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AAC3B,YAAA,UAAU,EAAE,aAAa;YACzB,oBAAoB;YACpB,kBAAkB;AAClB,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;AAC5B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,EAAE;IACb;AAEA;;;;AAIG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,EAAE,GAAuB,IAAI,CAAC,IAAI,CAAC,aAAa;QACpD,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;AACjC,YAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC;AAClC,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS;AAC1B,YAAA,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,QAAQ;AAAE,gBAAA,OAAO,EAAE;AAC/C,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACvB;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,IAAI,GAAA;AACV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW;AAC1B,QAAA,IAAI,CAAC,CAAC;YAAE;QACR,CAAC,CAAC,WAAW,EAAE;AACf,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B;QACF;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE;QACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE;uGAnHW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;;;ACjDD;;;;;;;AAOG;MAmBU,YAAY,CAAA;AACN,IAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAA6B;AAC5D,IAAA,MAAM,GAA4B,MAAM,CAAC,UAAU,CAAC;IAC7D,OAAO,GAAG,KAAK;IACf,OAAO,GAAG,KAAK;;IAGN,QAAQ,GAAG,SAAS,CAAC,gBAAgB;iFAAC;IAEpC,KAAK,GAAG,MAAM,CAAS,EAAE;8EAAC;AAE7C,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;AACtD,QAAA,IAAI,MAAM;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1C;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/B;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;IACnB;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE;AACnC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B;QAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QACtD,IAAI,CAAC,MAAM,EAAE;IACf;uGAzCW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOe,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArB5C;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAVS,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAef,YAAY,EAAA,UAAA,EAAA,CAAA;kBAlBxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;oHAQuC,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACjCxD;;;;;;;;AAQG;MAkBU,cAAc,CAAA;AACR,IAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAA6B;AAC5D,IAAA,MAAM,GAA4B,MAAM,CAAC,UAAU,CAAC;IAC7D,OAAO,GAAG,KAAK;IACf,OAAO,GAAG,KAAK;;IAGN,WAAW,GAAG,SAAS,CAAC,sBAAsB;oFAAC;IAE7C,KAAK,GAAG,MAAM,CAAS,CAAC;8EAAC;AAE5C,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnE,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,QAAA,CAAC,CAAC;IACJ;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QACxB;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;QACnB;IACF;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;IACnB;AAEA;;;;;AAKG;AACO,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE;AACnC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B;QAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QACtD,IAAI,CAAC,MAAM,EAAE;IACf;uGAhDW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOgB,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBrD;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EATS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAcrB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjB1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;uHAQ0C,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AClCjE;;;;;;;;;;;;AAYG;MAiBU,YAAY,CAAA;AACN,IAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAkC;AACjE,IAAA,MAAM,GAA4B,MAAM,CAAC,UAAU,CAAC;IAC7D,OAAO,GAAG,KAAK;IAEJ,KAAK,GAAG,MAAM,CAAc,IAAI;8EAAC;AAEpD,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC1E,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAmB,OAAO,CAAC;YAChF,KAAK,EAAE,KAAK,EAAE;AAChB,QAAA,CAAC,CAAC;IACJ;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;;;;;;;AAOlB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAmB,OAAO,CAAC;AAChF,QAAA,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AACvC,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACrB;QACF;QACA,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAChD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IACzB;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;IACnB;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,MAAM,EAAE;QACf;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YACjC,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE;QACf;IACF;uGAtDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZb;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EARS,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAapB,YAAY,EAAA,UAAA,EAAA,CAAA;kBAhBxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB,CAAC;AAChC,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AA0DD;;;;AAIG;AACH,SAAS,YAAY,CAAC,GAAW,EAAA;IAC/B,MAAM,GAAG,GAAG,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC;IACjD,IAAI,GAAG,EAAE;QACP,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG;AACtF,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AAC9B,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,QAAQ;AAC3D;;AC5FA;;;;;;;;;AASG;MAqBU,cAAc,CAAA;AACR,IAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAA8B;AAE9E;;;AAGG;IACc,MAAM,GAAG,SAAS,CAAC,iBAAiB;+EAAC;AAEtD;;AAE0E;IACjE,SAAS,GAAG,KAAK,CAAsC,EAAE;kFAAC;AAEhD,IAAA,QAAQ,GAAG,QAAQ,CAAmB,MAAK;AAC5D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAoD;AAC9F,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,IAAI,QAAQ,IAAI,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,IACnB,OAAO,GAAG,KAAK;cACX,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;AAC1B,cAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAC3C;IACH,CAAC;iFAAC;IAEiB,UAAU,GAAG,MAAM,CAAU,SAAS;mFAAC;IAElD,OAAO,GAAG,KAAK;AAEvB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;;;;;QAMnC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,GAAG,EAAE,SAAS,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;gBAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAClB,YAAA,OAAmC,CAAC,aAAa,CAAC,KAAK,EAAE;AAC5D,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,aAAa,CAAC,IAAa,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IACvB;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;IACnB;uGApDW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOW,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvB3C;;;;;;;;;;;GAWT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAZS,iBAAiB,iHAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiBnC,cAAc,EAAA,UAAA,EAAA,CAAA;kBApB1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;kHAQqC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACzDvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEG;MA8BU,iBAAiB,CAAA;IACnB,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,IAAI,GAAG,KAAK,CAAqB,IAAI;6EAAC;IACtC,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;AACzD;;;;;AAKG;IACM,UAAU,GAAG,KAAK,CAAqB,OAAO;mFAAC;uGAX7C,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBlB;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ijGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApBS,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA0BP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EACP,CAAC,QAAQ,CAAC,EAAA,QAAA,EACT;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,ijGAAA,CAAA,EAAA;;;ACtFjD;;;;;;;AAOG;MAsBU,eAAe,CAAA;AACP,IAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAA8B;AAC/D,IAAA,MAAM,GAA4B,MAAM,CAAC,UAAU,CAAC;IAElD,KAAK,GAAG,MAAM,CAAU,KAAK;8EAAC;AAEjD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAoB,QAAQ,CAAC;YAChF,GAAG,EAAE,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;IACJ;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;IACnB;AAEA;;;;;AAKG;IACO,eAAe,GAAA;AACvB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IACvB;uGA5BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBhB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAkBhB,eAAe,EAAA,UAAA,EAAA,CAAA;kBArB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACbD;;;;AAIG;MACU,kBAAkB,GAAG,IAAI,cAAc,CAClD,oBAAoB;;ACPtB;MACa,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB;AAGrB;AACA,MAAM,mBAAmB,GAAG,GAAG;AAE/B;;;;;;;;;;;;;;;;AAgBG;MAuBU,YAAY,CAAA;AACN,IAAA,GAAG,GAAG,MAAM,CAAyB,iBAAiB,CAAC;AACvD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG7B,IAAA,OAAO,GAAG,IAAI,WAAW,CAC1C,CAAC,MAAK;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE;QAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAK,CAA6B,CAAC,UAAU,KAAK,MAAM,EAAE;AACtF,YAAA,OAAQ,CAAuB,CAAC,MAAM,IAAI,EAAE;QAC9C;AACA,QAAA,OAAO,EAAE;IACX,CAAC,GAAG,EACJ,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB;;AAGkB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM;QAC/C,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACtE,OAAO,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE;IAC7B,CAAC;kFAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3E,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,KAAK,KAAK,EAAE,EAAE;gBAChB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;gBACzC;YACF;AACA,YAAA,MAAM,KAAK,GAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;YACxF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;AACvC,QAAA,CAAC,CAAC;IACN;uGAnCW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZb;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAmBtD,YAAY,EAAA,UAAA,EAAA,CAAA;kBAtBxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAEjD,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,gBAAgB;qBACxB,EAAA,QAAA,EACS;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA;;;AC9CH;AACA,MAAM,SAAS,GAAkC;IAC/C,EAAE,KAAK,EAAE,QAAQ,EAAe,KAAK,EAAE,GAAG,EAAW,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,WAAW,EAAY,KAAK,EAAE,GAAG,EAAW,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,aAAa,EAAU,KAAK,EAAE,GAAG,EAAW,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,oBAAoB,EAAG,KAAK,EAAE,GAAG,EAAW,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,UAAU,EAAa,KAAK,EAAE,GAAG,EAAW,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,iBAAiB,EAAM,KAAK,EAAE,GAAG,EAAW,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,SAAS,EAAc,KAAK,EAAE,SAAS,EAAK,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,OAAO,EAAgB,KAAK,EAAE,UAAU,EAAI,MAAM,EAAE,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,UAAU,EAAa,KAAK,EAAE,WAAW,EAAG,MAAM,EAAE,CAAC,EAAE;CACjE;AAED,MAAM,WAAW,GAAwD,IAAI,GAAG,CAC9E,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAU,CAAC,CAC1C;AAED;;;;;;;;;;;;;;AAcG;MA4CU,cAAc,CAAA;AACR,IAAA,GAAG,GAAG,MAAM,CAAyB,iBAAiB,CAAC;;IAGrD,SAAS,GAAG,SAAS;IAErB,QAAQ,GAAG,MAAM,CAAqB,QAAQ;iFAAC;IAC/C,OAAO,GAAG,MAAM,CAAqB,SAAS;gFAAC;IAC/C,SAAS,GAAG,MAAM,CAAqB,SAAS;kFAAC;AAEjD,IAAA,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC;0FACpD;AAEgB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAMC,aAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;oFAAC;IACxD,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,gBAAA,CAAkB;0FAC9C;AACkB,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QAClD,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3C,QAAA,OAAO,EAAE,EAAE,MAAM,KAAK;AACpB,cAAE,CAAA,OAAA,EAAU,IAAI,CAAC,WAAW,EAAE,CAAA,QAAA;AAC9B,cAAE,CAAA,OAAA,EAAU,IAAI,CAAC,WAAW,EAAE,QAAQ;IAC1C,CAAC;yFAAC;IACiB,kBAAkB,GAAG,QAAQ,CAC9C,MAAM,CAAA,OAAA,EAAU,IAAI,CAAC,WAAW,EAAE,CAAA,QAAA,CAAU;2FAC7C;AAED,IAAA,WAAA,GAAA;;;;;QAKE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE;AAC1C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAkB;;YAErC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;AAC1C,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YACzB;AAAO,iBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACvC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACvB;AAAO,iBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACpC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACvB;QACF;AAAO,aAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK;AACd,eAAA,CAA6B,CAAC,UAAU,KAAK,QAAQ,EAAE;YACpE,MAAM,CAAC,GAAG,CAAwB;YAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChC;IACF;AAEU,IAAA,gBAAgB,CAAC,IAAa,EAAA;QACtC,MAAM,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAuB;AACvF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE;QAC1B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAE;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;;;;AAIrB,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;AAAO,aAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;QACA,IAAI,CAAC,MAAM,EAAE;IACf;AAEU,IAAA,eAAe,CAAC,KAAoB,EAAA;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE;IACf;AAEU,IAAA,iBAAiB,CAAC,KAAoB,EAAA;QAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE;IACf;IAEQ,MAAM,GAAA;AACZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACzC;QACF;AACA,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,KAAK,GAAwB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YACjE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;YACrC;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;;QAE9B,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;YACnD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACzC;QACF;AACA,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,MAAM,KAAK,GAAwB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;YAClF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;YACrC;QACF;;;AAGA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;YACpD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACzC;QACF;AACA,QAAA,MAAM,KAAK,GAAwB;AACjC,YAAA,UAAU,EAAE,QAAQ;YACpB,IAAI;AACJ,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,QAAQ,EAAE,SAAS;SACpB;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IACvC;uGAzHW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtCS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAwC3D,cAAc,EAAA,UAAA,EAAA,CAAA;kBA3C1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAEtD,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,kBAAkB;qBAC1B,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA;;AA8HH,SAAS,SAAS,CAAC,KAAgC,EAAA;AACjD,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;AACpE;AAEA,SAASA,aAAW,CAAQ,MAA8B,EAAA;AACxD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;AACtC,IAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE;AACxD;;ACxNA;;;;;;;;;;;AAWG;MAgCU,YAAY,CAAA;AACN,IAAA,GAAG,GAAG,MAAM,CAAyB,iBAAiB,CAAC;IAEhE,OAAO,GAAgB,CAAC,MAAK;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE;AAC1C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAgB;AAC7C,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAK,CAA6B,CAAC,UAAU,KAAK,MAAM,EAAE;YACtF,MAAM,CAAC,GAAG,CAAsB;YAChC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QAC/B;AACA,QAAA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,CAAC,GAAG;AAEe,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iFAAC;AACrD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;+EAAC;AAEnD,IAAA,aAAa,GAAG,QAAQ,CACzC,MAAM,CAAA,UAAA,EAAaA,aAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,UAAA,CAAY;sFAC5D;AACkB,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,CAAA,UAAA,EAAaA,aAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,QAAA,CAAU;oFAC1D;AAES,IAAA,YAAY,CAAC,IAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE;IACf;AAEU,IAAA,UAAU,CAAC,IAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE;IACf;IAEQ,MAAM,GAAA;QACZ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO;QAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE;YAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACzC;QACF;AACA,QAAA,MAAM,KAAK,GAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACpG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IACvC;uGAzCW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBb;;;;;;;;;;;;;;;;;;;GAmBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1BS,qBAAqB,kQAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA4BtC,YAAY,EAAA,UAAA,EAAA,CAAA;kBA/BxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAEjC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,gBAAgB;qBACxB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA;;AA8CH,SAAS,SAAS,CAAC,GAAuB,EAAA;AACxC,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,IAAI;;AAErB,IAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5C,IAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;IAC/B,OAAO,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9B;AAEA,SAAS,SAAS,CAAC,IAA6B,EAAA;AAC9C,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;AAC3B,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACtD,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACjD,IAAA,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE;AACzB;AAEA,SAASA,aAAW,CAAQ,MAA8B,EAAA;AACxD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;AACtC,IAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE;AACxD;;ACtGA;AACA,MAAM,SAAS,GAAG,mBAAmB;AAErC;;;;;;;;AAQG;MA4BU,cAAc,CAAA;AACR,IAAA,GAAG,GAAG,MAAM,CAAyB,iBAAiB,CAAC;AAExE;;;AAGgC;IACvB,OAAO,GAAG,KAAK,CAAyC,IAAI;gFAAC;;IAE7D,QAAQ,GAAG,KAAK,CAAS,KAAK;iFAAC;AAExC;;AAEK;AACc,IAAA,eAAe,GAAG,QAAQ,CAAkC,MAAK;AAClF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;AAC/B,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,QAAQ;AACpD,QAAA,MAAM,IAAI,GAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAiD,EAAE,EAAE;AAC7F,QAAA,MAAM,GAAG,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE;QACrC,OAAO,GAAG,CAAC,GAAG,CAAuB,CAAC,CAAC,KACrC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,IAAK,CAAY,IAAI,OAAO,IAAK;AAC7E,cAAG;AACH,cAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CACnC;IACH,CAAC;wFAAC;;IAGiB,MAAM,GAAG,SAAS;AAElB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,UAAA,EAAa,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,CAAE;kFAAC;;AAGvE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE;AAChD,QAAA,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI;AAAE,YAAA,OAAO,SAAS;;QAE/D,MAAM,KAAK,GACT,OAAO;YACP,OAAO,OAAO,KAAK,QAAQ;YAC1B,OAAmC,CAAC,UAAU,KAAK;AAClD,cAAI,OAA4B,CAAC,MAAM,CAAC,CAAC;cACvC,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9E,QAAA,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACjD,CAAC;wFAAC;AAEQ,IAAA,KAAK,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEU,IAAA,QAAQ,CAAC,KAAc,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACnE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACzC;QACF;AACA,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACzC;QACF;AACA,QAAA,MAAM,KAAK,GAAqB,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC1E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IACvC;uGAhEW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBf;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtBS,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAwBrD,cAAc,EAAA,UAAA,EAAA,CAAA;kBA3B1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAEhD,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,kBAAkB;qBAC1B,EAAA,QAAA,EACS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2gBAAA,CAAA,EAAA;;AAqEH,SAAS,WAAW,CAAQ,MAA8B,EAAA;AACxD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;AACtC,IAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE;AACxD;;AChHA;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAKU,kBAAkB,CAAA;;IAEpB,QAAQ,GAAG,KAAK,CAAuB,IAAI;iFAAC;;IAG5C,OAAO,GAAG,KAAK,CAAU,SAAS;gFAAC;AAE5C;;AAE0C;IACjC,MAAM,GAAG,KAAK,CAAsC,SAAS;+EAAC;;IAG9D,MAAM,GAAG,MAAM,EAAW;;IAG1B,UAAU,GAAG,MAAM,EAAQ;AAEnB,IAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9B,IAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACzC,IAAA,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAExC,GAAG,GAAiC,IAAI;AAEhD,IAAA,WAAA,GAAA;;;;;QAKE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC9B,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,MAAM;gBAAE;AAEb,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACpD,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAA8B;AAC1C,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,MAAM,EAAE,CAAC,IAAa,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjD,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBACpC,IAAI;aACL;AACD,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACpC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBAChE,MAAM,EAAE,IAAI,CAAC,cAAc;AAC5B,aAAA,CAAC;YACF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC1C,mBAAmB,EAAE,IAAI,CAAC,WAAW;AACrC,gBAAA,QAAQ,EAAE,aAAa;AACxB,aAAA,CAAC;;;;;;AAMF,YAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAC5C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClD;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;uGAlEW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACpBD;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MAKU,kBAAkB,CAAA;;IAEpB,QAAQ,GAAG,KAAK,CAAC,QAAQ;iFAA0B;;IAGnD,QAAQ,GAAG,KAAK,CAAuB,IAAI;iFAAC;AAEpC,IAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9B,IAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACzC,IAAA,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAiB,QAAiB,CAAC;IAE7D,GAAG,GAAiC,IAAI;;;;;;;IAQxC,UAAU,GAA4E,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AAE5H,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;;;;;;;YAO9B,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE;gBACtF;YACF;YACA,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,MAAM;gBAAE;YAEb,MAAM,GAAG,GAAiB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC/C,MAAM,GAAG,GAA2B,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1D,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAK;;;AAG7B,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE;gBACnC,QAAQ,MAAM,CAAC,cAAc,EAAE,IAAI,IAAI;YACzC,CAAC;yFAAC;AACF,YAAA,MAAM,MAAM,GAAmC;gBAC7C,MAAM;AACN,gBAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAC1B,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;AAClC,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE,CAAC,CAAC,KACV,MAAM,CAAC,cAAc,CACnB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,GAAG,SAAS,GAAG,CAAC,CAC1D;AACH,gBAAA,QAAQ,EAAE,MAAM,MAAM,CAAC,aAAa,EAAE;gBACtC,KAAK,EAAE,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;aAC9C;AAED,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;AACpC,gBAAA,SAAS,EAAE;AACT,oBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,EAAE;oBAC7C,qBAAqB,CAAC,MAAM,CAAC;AAC9B,iBAAA;gBACD,MAAM,EAAE,IAAI,CAAC,cAAc;AAC5B,aAAA,CAAC;YACF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC1C,mBAAmB,EAAE,IAAI,CAAC,WAAW;AACrC,gBAAA,QAAQ,EAAE,aAAa;AACxB,aAAA,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;AACtC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClD;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAClD;uGAlFW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACYD,MAAM,sBAAsB,GAAG,GAAG;AAElC;AACA,MAAM,eAAe,GAA4C;AAC/D,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,OAAO,EAAE,eAAe;AACxB,IAAA,MAAM,EAAE,cAAc;CACvB;AAED;AACA,MAAM,eAAe,GAA4C;AAC/D,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,cAAc;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FG;MAwWU,gBAAgB,CAAA;;;;;;AAO3B;;;;;;AAMG;IACM,UAAU,GAAG,KAAK,CAA0D,IAAI;mFAAC;;IAGjF,SAAS,GAAG,KAAK,CAAyC,UAAU;kFAAC;IACrE,SAAS,GAAG,KAAK,CAAmC,UAAU;kFAAC;;IAE/D,SAAS,GAAG,KAAK,CAAC,KAAK;kFAAC;;IAGxB,WAAW,GAAG,KAAK,CAA8B,IAAI;oFAAC;IACtD,eAAe,GAAG,KAAK,CAA8B,MAAM;wFAAC;AACrE;;;;AAIG;IACM,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;;IAG5C,YAAY,GAAG,KAAK,CAAgB,IAAI;qFAAC;IACzC,gBAAgB,GAAG,KAAK,CAA0B,IAAI;yFAAC;;IAGvD,SAAS,GAAG,KAAK,CAAmB,MAAM;kFAAC;IAC3C,kBAAkB,GAAG,KAAK,CAAS,EAAE;2FAAC;;IAGtC,eAAe,GAAG,KAAK,CAAU,KAAK;wFAAC;IACvC,cAAc,GAAG,KAAK,CAAU,KAAK;uFAAC;IACtC,kBAAkB,GAAG,KAAK,CAAU,KAAK;2FAAC;IAC1C,mBAAmB,GAAG,KAAK,CAAU,IAAI;4FAAC;;;IAI1C,iBAAiB,GAAG,YAAY,CAAuB,gBAAgB;0FAAC;;IAGxE,QAAQ,GAAG,MAAM,EAA0B;IAC3C,WAAW,GAAG,MAAM,EAAgB;IACpC,QAAQ,GAAG,MAAM,EAA0B;IAC3C,cAAc,GAAG,MAAM,EAA0B;;AAG1D;;;;;;;AAOG;AACgB,IAAA,CAAC,GAAG,MAAM,CAAC,OAAO,CAA8B;AAC1D,IAAA,QAAQ,GAAG,MAAsB,IAAI,CAAC,CAAC;;IAG/B,YAAY,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAGzD,WAAW,GAAG,MAAM,CAA6C,IAAI;oFAAC;;AAGzF;;;;;AAKG;AACgB,IAAA,aAAa,GAAG,QAAQ,CAAU,MAAK;AACxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;QAC7B,IAAI,GAAG,EAAE;;;;YAIP,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,EAAE;AACrD,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE;AACrB,YAAA,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI;AACpB,YAAA,OAAO,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QACrC;AACA,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;IAC7B,CAAC;sFAAC;AAEF;;;;;;;AAOG;AACgB,IAAA,UAAU,GAAG,QAAQ,CAAe,MAAK;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;QAC1B,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAAE,YAAA,OAAO,GAAG,CAAC,aAAa,EAAE;QACzD,OAAO,IAAI,CAAC,gBAAgB;AAC1B,cAAE,GAAG,CAAC,wBAAwB,EAAE,CAAC;AACjC,cAAE,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI;IAC5B,CAAC;mFAAC;AAEF;;;AAGG;AACgB,IAAA,mBAAmB,GAAG,QAAQ,CAC/C,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE;4FACxE;AAED;;;;;AAKG;IACK,cAAc,GAAG,KAAK;IACtB,eAAe,GAAkB,IAAI;;AAG1B,IAAA,SAAS,GAAG,QAAQ,CAAU,MAAK;QACpD,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,OAAO,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,KAAK;IACtC,CAAC;kFAAC;;AAGiB,IAAA,QAAQ,GAAG,QAAQ,CAAU,MAAK;AACnD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,OAAO,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,KAAK;IAC1C,CAAC;iFAAC;;IAGiB,SAAS,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;kFACjF;AAED;;;;AAIG;AACgB,IAAA,gBAAgB,GAAG,QAAQ,CAAU,MAAK;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC7B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC9B,IAAI,IAAI,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;AAChC,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,sBAAsB;IACvF,CAAC;yFAAC;AAEiB,IAAA,IAAI,GAAG;AACxB,QAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,QAAA,QAAQ,EAAE,QAAQ,CAAC,MAAK;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;;YAE7B,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,gBAAA,MAAM,GAAG,GAAI,CAA6B,CAAC,OAAO;AAClD,gBAAA,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;YAC1C;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;KACH;AAED,IAAA,WAAA,GAAA;;;;;;;;;;QAUE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,SAAS,CAAC,MAAK;gBACb,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI;oBAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;;;;;;;;QAUF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;YAC7B,IAAI,CAAC,GAAG,EAAE;;;AAGR,gBAAA,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;gBACxB;YACF;AACA,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;gBACvB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B;YACF;YACA,IAAI,GAAG,CAAC,SAAS,EAAE;gBAAE;AACrB,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI;YACxB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAY,GAAG,EAAE,CAAC;;;;YAI/D,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC7C,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,YAAY;AAC5D,YAAA,IAAI,CAAC,OAAO;gBAAE;YACd,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAwB,GAAG,CAAC;YAC1D,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C;AACF,QAAA,CAAC,CAAC;;;QAIF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,YAAY;AAC5D,YAAA,IAAI,CAAC,OAAO;gBAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACpC,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;;AAGU,IAAA,SAAS,CAAC,IAA0B,EAAA;AAC5C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;QAC5B,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE;IACxE;IAEU,WAAW,CAAC,IAA0B,EAAE,MAAkB,EAAA;QAClE,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;IAEU,cAAc,CAAC,IAA0B,EAAE,MAAkB,EAAA;AACrE,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAAE;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;IAEU,aAAa,CAAC,IAA0B,EAAE,KAAoB,EAAA;AACtE,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;YACtB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACzB;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;;AAErD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,GAAuC,CAAC,cAAc,IAAI;YAClE;AAAO,iBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gBAC5B,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;YACzD;QACF;aAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;;AAEvF,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,OAAO,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC5C;QACF;IACF;AAEQ,IAAA,YAAY,CAAC,IAA0B,EAAA;QAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,QAAQ;YAAE;QACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IACxE;;IAGU,UAAU,CAAC,GAAe,EAAE,KAAiB,EAAA;;;;AAIrD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;AACjD,QAAA,IAAI,MAAM,EAAE,OAAO,CAAC,6DAA6D,CAAC,EAAE;AAClF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;YAChD;QACF;AACA,QAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClD;IAEU,aAAa,CAAC,GAAe,EAAE,KAAiB,EAAA;AACxD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IACxD;AAEA;;;;;;;AAOG;IACK,uBAAuB,CAAC,GAAe,EAAE,KAAiB,EAAA;AAChE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;QACnC,IAAI,IAAI,KAAK,MAAM;YAAE;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE;YAC7B;QACF;;QAEA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;YACpD;QACF;AACC,QAAA,GAAuC,CAAC,cAAc,IAAI;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE;IAC/B;AAEA;;;;AAIG;AACO,IAAA,sBAAsB,CAAC,KAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ;IACtC;;AAGU,IAAA,mBAAmB,CAAC,GAAe,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,OAAO,EAAE;AACnF,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;YACpD;QACF;AACC,QAAA,GAAuC,CAAC,cAAc,IAAI;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE;IAC/B;;AAGU,IAAA,WAAW,CAAC,OAAgB,EAAA;QACpC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;IACnD;AAEA;;;AAGG;AACK,IAAA,WAAW,CAAC,MAAc,EAAE,IAAY,EAAE,QAAiB,EAAA;AACjE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AACtD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;QAClD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE;QACpC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAC1E,QAAA,MAAM,IAAI,GAA4B,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AACxE,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ;QAC7B;QACA,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;IACtC;AAEA;;;;AAIG;IACO,aAAa,CAAC,GAAe,EAAE,KAAiB,EAAA;QACxD,KAAK,CAAC,eAAe,EAAE;AACtB,QAAA,GAAuC,CAAC,cAAc,IAAI;IAC7D;;AAGU,IAAA,SAAS,CAAC,CAAyB,EAAA;QAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI;AAClC,QAAA,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,GAAG,CAAC,GAAG,IAAI;IACjD;AAEA;;;;AAIG;AACO,IAAA,QAAQ,CAAC,CAAyB,EAAA;QAC1C,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI;QACpC,IAAI,GAAG,KAAK,KAAK;AAAE,YAAA,OAAO,YAAY;QACtC,IAAI,GAAG,KAAK,MAAM;AAAE,YAAA,OAAO,cAAc;AACzC,QAAA,OAAO,kBAAkB;IAC3B;AAEU,IAAA,aAAa,CAAC,GAA2B,EAAA;QACjD,MAAM,IAAI,GAAI,GAAG,CAAC,SAAS,CAAC,IAAiD,EAAE,EAAE;AACjF,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK;AAAE,YAAA,OAAO,IAAI;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,OAAO,IAAI,IAAI,eAAe,GAAG,IAAI,GAAG,IAAI;IAC9C;;AAGA;AACsE;AAC5D,IAAA,aAAa,CAAC,IAA0B,EAAA;QAChD,MAAM,IAAI,GAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAiD,EAAE,EAAE;AACzF,QAAA,MAAM,MAAM,GAAG,IAAI,EAAE,MAAmC;AACxD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,eAAe,CAAC,MAAM,CAAE;AAC1C,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI;IACtC;AAEA;;AAE2D;AACjD,IAAA,aAAa,CAAC,IAA0B,EAAA;QAChD,MAAM,IAAI,GAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAiD,EAAE,EAAE;AACzF,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;QAC3B,MAAM,GAAG,GAA4B,EAAE;QACvC,IAAI,IAAI,CAAC,aAAa;AAAE,YAAA,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa;AAC3D,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS;IACtD;AAEA;AACoD;IAC1C,iBAAiB,CAAC,GAA2B,EAAE,IAAY,EAAA;QACnE,MAAM,IAAI,GAAI,GAAG,CAAC,SAAS,CAAC,IAAiD,EAAE,EAAE;AACjF,QAAA,MAAM,MAAM,GAAG,IAAI,EAAE,QAAqC;QAC1D,OAAO,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI;IAChD;;IAGU,cAAc,CAAC,IAA0B,EAAE,IAAa,EAAA;AAChE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;;IAGU,cAAc,GAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;uGAjdW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjUjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6TT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+xPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlVC,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,UAAU,4EACV,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,eAAe,oIACf,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,6FAClB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA6UP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvW5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAO/B;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,MAAM,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,YAAY,CAAC;AACpE,yBAAA;qBACF,EAAA,OAAA,EACQ;wBACP,aAAa;wBACb,UAAU;wBACV,WAAW;wBACX,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,mBAAmB;wBACnB,kBAAkB;wBAClB,kBAAkB;wBAClB,gBAAgB;qBACjB,EAAA,IAAA,EACK;;;;;AAKJ,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,qBAAqB,EAAE,aAAa;AACpC,wBAAA,qBAAqB,EAAE,yBAAyB;AAChD,wBAAA,mBAAmB,EAAE,wBAAwB;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6TT,EAAA,aAAA,EAEc,iBAAiB,CAAC,QAAQ,EAAA,MAAA,EAAA,CAAA,+xPAAA,CAAA,EAAA;wuDAkDuB,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAoalF;AACA,SAAS,QAAQ,CAAQ,GAA2B,EAAA;AAClD,IAAA,OAAQ,GAAG,CAAC,SAAS,CAAC,IAAiD,EAAE,EAAE;AAC7E;;ACr9BA;;;;;;;;;;;AAWG;MAKU,YAAY,CAAA;uGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA2HU,uBAAuB,CAAA;;AAEf,IAAA,KAAK,GAAG,MAAM,CAAmB,QAAQ,CAAC;;IAGpD,MAAM,GAAG,MAAM,EAAuB;IAE5B,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY;IAC5C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;;AAGlC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC5B,QAAA,OAAO,CAAC,CAAC,iBAAiB,EAAE;IAC9B,CAAC;oFAAC;;AAGiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE;AAC3C,QAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;YACrB,IAAI,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,IAAI;QAC3B;AACA,QAAA,OAAO,KAAK;IACd,CAAC;qFAAC;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;QACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAC9C;AAEU,IAAA,UAAU,CAAC,KAAqB,EAAA;QACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC;AAEU,IAAA,SAAS,CAAC,QAAgB,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE;;AAE/C,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK;IAChC;IAEU,gBAAgB,CAAC,QAAgB,EAAE,OAAgB,EAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,EAAE;QAC5E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACjD;AAEU,IAAA,WAAW,CAAC,GAAoD,EAAA;AACxE,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM;AACnC,QAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,GAAG,CAAC,EAAE;IACrD;AAEU,IAAA,UAAU,CAAC,MAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B;uGApDW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7GxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlFC,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,kBAAkB,wFAClB,uBAAuB,EAAA,QAAA,EAAA,2BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA+Gd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1HnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,gBAAgB;wBAChB,iBAAiB;wBACjB,sBAAsB;wBACtB,mBAAmB;wBACnB,qBAAqB;wBACrB,qBAAqB;wBACrB,kBAAkB;wBAClB,uBAAuB;qBACxB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyET,EAAA,aAAA,EA4Bc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,kBAAkB;AAC3B,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,YAAY,EAAE,oBAAoB;qBACnC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA;;;AC1KjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MA8FU,0BAA0B,CAAA;;IAE5B,WAAW,GAAG,KAAK,CAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;oFAAC;;IAEzD,aAAa,GAAG,KAAK,CAAU,IAAI;sFAAC;AAC7C;;AAEgE;IACvD,MAAM,GAAG,KAAK,CAA4B,IAAI;+EAAC;AAErC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAqB;AAE/C,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ;iFAAC;AACpE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS;kFAAC;;IAGtE,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;qFAAC;AAEtE;;;;AAIG;IACgB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC;mFAClD;AAEkB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;QAC5B,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACtD,QAAA,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC;AAC7C,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;IAC9B,CAAC;gFAAC;;AAGQ,IAAA,YAAY,CAAC,YAAoB,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC;AAC7B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE;YAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;IAC1C;AAEU,IAAA,gBAAgB,CAAC,KAAc,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE;YAAE;QACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;IACzC;uGAjDW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,qCAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4nBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArFC,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAkFR,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA7FtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,qBAAqB;wBACrB,0BAA0B;wBAC1B,6BAA6B;wBAC7B,yBAAyB;wBACzB,yBAAyB;wBACzB,iBAAiB;wBACjB,iBAAiB;qBAClB,EAAA,IAAA,EACK;AACJ,wBAAA,KAAK,EAAE,qBAAqB;AAC5B,wBAAA,kBAAkB,EAAE,qCAAqC;qBAC1D,EAAA,QAAA,EAyCS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCT,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,4nBAAA,CAAA,EAAA;;;ACvGvC;;;;;;;;;AASG;MAwFU,uBAAuB,CAAA;AACf,IAAA,IAAI,GAAG,MAAM,CAAgB,WAAW,CAAC;;AAGzC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;;;;QAI7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE;IACpD,CAAC;oFAAC;AAEQ,IAAA,WAAW,CAAC,GAA6B,EAAA;AACjD,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM;AAC9B,QAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE;IAC3C;AAEU,IAAA,KAAK,CAAC,EAAU,EAAA;AACxB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE;QAC/C,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,MAAM;QAC9C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,OAAO;AAChD,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,SAAS,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtD;AAEU,IAAA,eAAe,CAAC,GAA6B,EAAA;QACrD,GAAG,CAAC,gBAAgB,EAAE;IACxB;IAEU,KAAK,CAAC,EAAU,EAAE,IAA8B,EAAA;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE;QACrD,MAAM,IAAI,GAAI,CAAC,OAAO,CAAC,IAAI,IAAK,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzD,IAAI,IAAI,KAAK,MAAM;AAAG,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,IAAI,KAAK,OAAO;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;IAC9D;AAEU,IAAA,aAAa,CAAC,EAAU,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;AAChD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC9B,cAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAC9B,cAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C;uGAjDW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjFxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6ZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtDS,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoFP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAvFnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP,CAAC,QAAQ,CAAC,EAAA,eAAA,EACF,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDT,EAAA,IAAA,EA0BK;AACJ,wBAAA,mBAAmB,EAAE,YAAY;AAClC,qBAAA,EAAA,MAAA,EAAA,CAAA,6ZAAA,CAAA,EAAA;;AAsDH;;;;;;;;;;;;;;;;;;;AAmBG;MASU,yBAAyB,CAAA;;IAE3B,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;;IAErB,OAAO,GAAG,KAAK,CAAC,SAAS;gFAAC;AAElB,IAAA,GAAG,GAAG,MAAM,CAAmB,QAAQ,CAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACxC,GAAG,GAAgD,IAAI;AAE/D,IAAA,WAAA,GAAA;;;;QAIE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;;;;;YAK1B,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrB,IAAI,CAAC,UAAU,EAAE;gBACnB;AAAO,qBAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;AAC5B,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,oBAAA,IAAI,CAAC,GAAG,GAAG,IAAI;gBACjB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,IAAI,GAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AACtE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC1B,uBAAuB,EACvB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CACxB;AACD,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;;;AAGd,QAAA,GAAG,CAAC;AACD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI;gBACf,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACN;uGAjDW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,yaAF1B,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAED,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;AACrC,oBAAA,QAAQ,EAAE,CAAA,CAAE;AACb,iBAAA;;;AChND;;;;;;;;;;;;;;;;;;;AAmBG;MAmCU,yBAAyB,CAAA;AACnB,IAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAgC;AAErD,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE;iFAAC;IAE3D,aAAa,GAAG,QAAQ,CACzC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;sFAC5E;AAEkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC;mFAC5F;uGAXU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9B1B;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6PAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkBU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAlCrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;GAYT,EAAA,aAAA,EAgBc,iBAAiB,CAAC,QAAQ,EAAA,MAAA,EAAA,CAAA,6PAAA,CAAA,EAAA;;;ACjD3C,SAAS,UAAU,CAAI,GAAM,EAAE,MAAc,EAAA;AAC3C,IAAA,OAAQ,GAA+B,CAAC,MAAM,CAAC;AACjD;AAEA,SAAS,SAAS,CAAC,CAAU,EAAA;IAC3B,IAAI,CAAC,IAAI,IAAI;AAAE,QAAA,OAAO,EAAE;AACxB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACnB,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1E,IAAA,OAAO,WAAW,GAAG,CAAA,CAAA,EAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,CAAC;AACvD;AAEM,SAAU,SAAS,CAAI,IAAsB,EAAA;AACjD,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACtD,CAAC,IAAI,CAAC,IAAI,CAAC;AACZ,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,IAAI,EAAE;AAC7B;AAEM,SAAU,UAAU,CAAI,IAA8C,EAAA;IAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACvE;AAEM,SAAU,KAAK,CAAI,IAAsB,EAAA;AAC7C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1D,CAAC,IAAI,CAAC,IAAI,CAAC;AACZ,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,IAAI,EAAE;AAC7B;AAEM,SAAU,cAAc,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAI,GAAG,YAAY,EAAA;AACnF,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AAAE,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACnC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;AACT,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5B,IAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B;AAEO,eAAe,eAAe,CAAC,IAAY,EAAA;IAChD,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3C;;AC3CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFG;MAwBU,eAAe,CAAA;;IAEjB,OAAO,GAAG,KAAK,CAAsB,SAAS;gFAAC;uGAF7C,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,+dAThB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,skEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAvB3B,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,MAAM,EAAE;gCACN,gBAAgB;gCAChB,4BAA4B;gCAC5B,kCAAkC;AACnC,6BAAA;4BACD,OAAO,EAAE,CAAC,4BAA4B,CAAC;AACxC,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,qBAAqB,EAAE,WAAW;qBACnC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,skEAAA,CAAA,EAAA;;AAOjD;;;;;;;;AAQG;MAUU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+JALnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAT9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,CAAC,SAAS,CAAC;AAC3B,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;oBAC9B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;;AAQG;MAoBU,cAAc,CAAA;;IAEhB,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAU;;IAEhC,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;uGAJrB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAff;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAXS,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBJ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAnB1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,KAAK,CAAC;AAChB,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAQD;;;;;;;;;AASG;MAcU,mBAAmB,CAAA;;;;AAIX,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;uGAJlC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATpB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;AAC5E,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;oBAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC9LD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FG;MA6BU,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,0XAVf,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g4GAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAUf,cAAc,EAAA,UAAA,EAAA,CAAA;kBA5B1B,SAAS;+BACE,QAAQ,EAAA,UAAA,EACN,IAAI,EAAA,cAAA,EAIA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,MAAM,EAAE;gCACN,iBAAiB;gCACjB,eAAe;gCACf,YAAY;gCACZ,eAAe;AAChB,6BAAA;AACD,4BAAA,OAAO,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC;AACjD,yBAAA;AACF,qBAAA,EAAA,QAAA,EACS,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,QAAQ;;;qBAGhB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g4GAAA,CAAA,EAAA;;AAIjD;;;;;;;;AAQG;MAkBU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPrB,CAAA,2CAAA,CAA6C,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAP7C,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAcd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,WAAW;4BACtB,MAAM,EAAE,CAAC,kBAAkB,CAAC;AAC7B,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,2CAAA,CAA6C;oBACvD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,eAAe;AACvB,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;;;AAOG;MAsBU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+UAPnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAOf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBArB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,MAAM,EAAE;gCACN,eAAe;gCACf,sBAAsB;gCACtB,mBAAmB;gCACnB,mBAAmB;AACpB,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,aAAa;AACrB,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACrKD,IAAI,MAAM,GAAG,CAAC;AAEd;;;;;AAKG;AACH,SAAS,cAAc,CAAC,CAA8B,EAAA;AACpD,IAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,OAAO,SAAS;AAC3C,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC/C,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AAC3C;AAEA;;;;;AAKG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAA;IACpC,OAAO,CAAC,CAA8B,KAAY;AAChD,QAAA,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,GAAG;AACjB,IAAA,CAAC;AACH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FG;MAoDU,mBAAmB,CAAA;;IAErB,OAAO,GAAG,KAAK,CAAS,EAAE;gFAAC;;IAG3B,aAAa,GAAG,KAAK,CAAS,EAAE;sFAAC;;AAGjC,IAAA,MAAM,GAAG,KAAK,CAAsC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAC5D,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAA,CAC/B;;IAGO,QAAQ,GAAG,KAAK,CAAmB,UAAU;iFAAC;;IAG9C,YAAY,GAAG,KAAK,CAAuB,KAAK;qFAAC;;AAGjD,IAAA,SAAS,GAAG,KAAK,CAAsC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAC/D,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAA,CAC/B;;AAGO,IAAA,SAAS,GAAG,KAAK,CAAsC,MAAM,CAAC,iBAAiB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACtF,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,GACtD;;AAGO,IAAA,WAAW,GAAG,KAAK,CAAsC,MAAM,CAAC,iBAAiB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EACxF,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,GACtD;;IAGO,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG7D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,SAAS,GAAG,KAAK,CAAC,UAAU;kFAAC;;IAG7B,MAAM,GAAG,KAAK,CAAC,IAAI;+EAAC;;AAGV,IAAA,SAAS,GAAG,CAAA,oBAAA,EAAuB,EAAE,MAAM,EAAE;;;;;;;IAQ/C,QAAQ,GAAG,MAAM,CAAS,EAAE;iFAAC;IAC3B,WAAW,GAAG,MAAM,CAAU,KAAK;oFAAC;;AAGpC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;IACnD,CAAC;qFAAC;AAEM,IAAA,SAAS;AACT,IAAA,UAAU;;AAGC,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oFAClE;AAED;AAC4D;AACzC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,MAAM;QAC1B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM;IACtC,CAAC;oFAAC;;AAGiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;QACtC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC1C,IAAI,SAAS,IAAI,CAAC;AAAE,YAAA,OAAO,OAAO;QAClC,IAAI,SAAS,IAAI,EAAE;AAAE,YAAA,OAAO,MAAM;AAClC,QAAA,OAAO,IAAI;IACb,CAAC;qFAAC;;AAGiB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;wFAC3C;AAED;AAC2E;AACxD,IAAA,WAAW,GAAG,QAAQ,CAAS,MAAK;AACrD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE;QACpC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,yBAAyB;QAC7C,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,yBAAyB;QAC9C,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,yBAAyB;AAC9C,QAAA,OAAO,EAAE;IACX,CAAC;oFAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClG,gBAAA,OAAO,CAAC,IAAI,CACV,mFAAmF,CACpF;YACH;AACF,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB;;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,IAAI;IACrB;;AAGA,IAAA,UAAU,CAAC,GAAY,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAnJW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EA/CnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+3EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxCS,UAAU,qJAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgDvB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnD/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,EAAE,YAAY,CAAC,EAAA,SAAA,EACxB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,oBAAoB;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+3EAAA,CAAA,EAAA;;;ACxKjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EG;MAsEU,qBAAqB,CAAA;;IAEvB,OAAO,GAAG,KAAK,CAAuB,IAAI;gFAAC;IAE3C,YAAY,GAAG,KAAK,CAAoB,MAAM;qFAAC;IAC/C,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,WAAW,GAAG,KAAK,CAAuB,MAAM;oFAAC;IACjD,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE7D,MAAM,GAAG,KAAK,CAAkB,CAAC,8EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;IAClE,UAAU,GAAG,KAAK,CAAkB,CAAC,kFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AACtE,IAAA,YAAY,GAAG,KAAK,CAA8B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EAClE,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GACvG;IACO,YAAY,GAAG,KAAK,CAAkB,CAAC,oFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;IAExE,KAAK,GAAG,KAAK,CAAmC,IAAI;8EAAC;IACrD,KAAK,GAAG,KAAK,CAAmC,IAAI;8EAAC;IAErD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC1D,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC1D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEzD,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;IAC5B,eAAe,GAAG,KAAK,CAAmB,SAAS;wFAAC;IAEpD,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;IAC/B,YAAY,GAAG,KAAK,CAAS,OAAO;qFAAC;IACrC,cAAc,GAAG,KAAK,CAAS,SAAS;uFAAC;IACzC,cAAc,GAAG,KAAK,CAAS,SAAS;uFAAC;IACzC,eAAe,GAAG,KAAK,CAAS,cAAc;wFAAC;;AAGrC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;IAC3C,CAAC;qFAAC;uGArCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3DC,YAAY,wUACZ,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,kEACnB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA6DX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArEjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,mBAAmB;wBACnB,mBAAmB;wBACnB,oBAAoB;qBACrB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,o6FAAA,CAAA,EAAA;;;AC5JjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDG;MAUU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4HANxB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g8FAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,QAAA,EACN,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g8FAAA,CAAA,EAAA;;AAIjD;;;;AAIG;MAwBU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBzB;;;;;;;;;;;;;GAaT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g8FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAdS,eAAe,yQAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoBhC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvBpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g8FAAA,CAAA,EAAA;;AAIjD;;;AAGG;MAiBU,gBAAgB,CAAA;IAClB,OAAO,GAAG,KAAK,CAAiB,SAAS;gFAAC;IAC1C,EAAE,GAAG,KAAK,CAAS,EAAE;2EAAC;uGAFpB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZjB;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EARS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAaN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;AAClB,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAMD;;;;;;;AAOG;MAeU,qBAAqB,CAAA;;IAEvB,OAAO,GAAG,KAAK,CAAC,QAAQ;gFAAU;AAE3C;;;;;AAKG;IACM,SAAS,GAAG,KAAK,CAAS,sBAAsB;kFAAC;uGAV/C,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVtB,CAAA;;;;;AAKe,0BAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EANf,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAWX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAdjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKe,0BAAA,CAAA;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC5ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EG;MAWU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sHANnB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,84DAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAA,QAAA,EACnE,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,84DAAA,CAAA,EAAA;;;ACjFjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEG;MA4CU,wBAAwB,CAAA;;IAE1B,WAAW,GAAG,KAAK,CAAS,SAAS;oFAAC;;IAGtC,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;;AAGf,IAAA,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;;AAGzC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAA+B;QAC3D,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;AACxE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB,CAAC;qFAAC;uGAfS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3BzB;;;;;;;;;;;;;;;;;;GAkBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+tEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnBS,sBAAsB,2GAAE,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA4B3C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA3CpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,cAAA,EAMA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,eAAe;AAC1B,4BAAA,MAAM,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;AACpC,4BAAA,OAAO,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;AAClD,yBAAA;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,EAAA,QAAA,EAC7C;;;;;;;;;;;;;;;;;;GAkBT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,sBAAsB,EAAE,wBAAwB;qBACjD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+tEAAA,CAAA,EAAA;;AAoBjD;;;;;AAKG;AA2BG,MAAO,wBAAyB,SAAQ,qBAAqB,CAAA;uGAAtD,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,SAAA,EAdxB;AACT,YAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC,EAAE;SAC5F,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAVS,eAAe,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAed,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA1BpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;;;;;;;;;oBAShB,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,wBAAyB,CAAC,EAAE;AAC5F,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;oBACtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAGD;;;;;AAKG;MAiBU,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+OAP3B,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAOf,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAhBtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,uBAAuB;4BAClC,MAAM,EAAE,CAAC,iBAAiB,CAAC;AAC5B,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,sBAAsB;AAChC,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC1KD;;;;;;;;;;;;;;AAcG;MAKU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;;;;;;;;;;;;;;;AAeG;MAKU,4BAA4B,CAAA;AAC9B,IAAA,GAAG,GAAG,MAAM,CAA+C,WAAW,CAAC;uGADrE,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2CAA2C;AACrD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DG;MAmEU,yBAAyB,CAAA;;IAE3B,aAAa,GAAG,KAAK,CAAS,kBAAkB;sFAAC;;IAGjD,UAAU,GAAG,KAAK,CAAmB,IAAI,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG3E,WAAW,GAAG,KAAK,CAAS,iBAAiB;oFAAC;;IAG9C,MAAM,GAAG,KAAK,CAAU,KAAK;+EAAC;AAEvC;;;;AAIG;IACM,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;;IAG5B,OAAO,GAAG,KAAK,CAAqB,EAAE;gFAAC;;IAGvC,qBAAqB,GAAG,KAAK,CAAmB,IAAI,6FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE5E,OAAO,GAAG,YAAY,CAAC,4BAA4B;gFAAC;IACpD,YAAY,GAAG,YAAY,CAAC,sBAAsB;qFAAC;AAErD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEjD,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE;AACzC,YAAA,MAAM,OAAO,GAAG,CAAC,CAAgB,KAAI;AACnC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;oBACzC,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7B;AACF,YAAA,CAAC;AACD,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;AAC7C,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACnF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE;YACzC,cAAc,CAAC,MAAK;gBAClB,QAAQ,CAAC,aAAa,CAAmB,wDAAwD,CAAC,EAAE,KAAK,EAAE;AAC7G,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;;IAGA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;IAEU,UAAU,GAAA;QAClB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;IAChD;IAEQ,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAA;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAEtC,QAAA,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,WAAW;aAC3C,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAChD;qBACE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;QAExD,IAAI,QAAQ,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AACzC,QAAA,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;AAC/C,QAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QAC3C,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG;IACxC;uGAvFW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA0BM,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACvB,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApF3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArDS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,4DAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA+D9D,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAlErC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,CAAC,kBAC1D,CAAC;AACf,4BAAA,SAAS,EAAE,gBAAgB;AAC3B,4BAAA,MAAM,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;AACvH,4BAAA,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,YAAY,CAAC;AAC1D,yBAAA,CAAC,EAAA,QAAA,EACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,oBAAoB;AAC3B,wBAAA,KAAK,EAAE,oBAAoB;AAC3B,wBAAA,cAAc,EAAE,cAAc;qBAC/B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA;AA4BL,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,4BAA4B,8FACvB,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA+DvE;;;;;;AAMG;MAoCU,sBAAsB,CAAA;;IAExB,OAAO,GAAG,KAAK,CAAU,SAAS;gFAAC;;IAEnC,UAAU,GAAG,KAAK,CAAoB,EAAE;mFAAC;;IAEzC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;;IAEvC,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEpE,KAAK,GAAG,cAAc,EAAW;AACjC,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;;IAGjC,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;iFAChF;uGAhBU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,g+BAXvB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAWf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAnClC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,cAAA,EAaA,CAAC;AACf,4BAAA,SAAS,EAAE,UAAU;AACrB,4BAAA,MAAM,EAAE;gCACN,qBAAqB;gCACrB,2BAA2B;gCAC3B,YAAY;gCACZ,YAAY;AACb,6BAAA;AACF,yBAAA,CAAC,YACQ,CAAA,cAAA,CAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE,iBAAiB;AAC1B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,sBAAsB,EAAE,+BAA+B;AACvD,wBAAA,oBAAoB,EAAE,wBAAwB;qBAC/C,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA;;AAqBjD;;;;;;AAMG;MAgBU,uBAAuB,CAAA;;IAEzB,OAAO,GAAG,KAAK,CAAS,EAAE;gFAAC;uGAFzB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXxB;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAfnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,cAAA,EACA,CAAC,cAAc,CAAC,EAAA,QAAA,EACtB;;;;;AAKT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAA,eAAA,EAClB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA;;AAOjD;;;;;;;;AAQG;MAkBU,uBAAuB,CAAA;;IAEzB,aAAa,GAAG,KAAK,CAAS,kBAAkB;sFAAC;uGAF/C,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbxB;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EARS,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAcb,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,cAAc,CAAC,EAAA,QAAA,EACf;;;;;;;AAOT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA;;AAOjD;;;;;;AAMG;MAWU,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,0LAN5B,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,cAAA,EACA,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAC1B,EAAE,EAAA,aAAA,EAEG,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAA,eAAA,EACtB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA;;AAIjD;;;;;;AAMG;MAWU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,8KANxB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,cAAA,EACA,CAAC,cAAc,CAAC,EAAA,QAAA,EACtB,gBAAgB,EAAA,aAAA,EAEX,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAA,eAAA,EAClB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,46HAAA,CAAA,EAAA;;;AC1ZjD;AACqE;AACrE,SAAS,WAAW,CAClB,KAA4B,EAC5B,KAAK,GAAG,CAAC,EACT,SAAA,GAAgC,EAAE,EAAA;IAElC,MAAM,MAAM,GAAe,EAAE;AAC7B,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM;IACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACxB,QAAA,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,KAAK;YACL,IAAI;YACJ,GAAG,EAAE,CAAC,GAAG,CAAC;YACV,WAAW;AACX,YAAA,cAAc,EAAE,SAAS;AAC1B,SAAA,CAAC;AACF,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;YAChC,MAAM,CAAC,IAAI,CACT,GAAG,WAAW,CAAC,IAAI,CAAC,QAAiC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAC9F;QACH;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACf;AAEA;;;;;;;;AAQG;MAyCU,yBAAyB,CAAA;;IAE3B,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAW;;IAEjC,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;IAEzB,KAAK,GAAG,KAAK,CAAS,CAAC;8EAAC;;IAExB,IAAI,GAAG,KAAK,CAAS,CAAC;6EAAC;;IAEvB,GAAG,GAAG,KAAK,CAAS,CAAC;4EAAC;;IAEtB,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE3D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAhBvD,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCS,gBAAgB,oKAAE,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqCnC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAxCrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MA+DU,qBAAqB,CAAA;;IAEvB,WAAW,GAAG,KAAK,CAAS,SAAS;oFAAC;;IAGtC,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEjE;;;;AAIG;AACM,IAAA,QAAQ,GAAG,KAAK,CACvB,MAAM,SAAS;iFAChB;;IAGQ,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;;AAGhD,IAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAElC;;;;AAIG;AACM,IAAA,SAAS,GAAG,QAAQ,CAAa,MACxC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAA2B,CAAC;kFACtD;AAED;;;AAGG;AACH,IAAA,WAAW,CAAC,GAAa,EAAA;AACvB,QAAA,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;;AAEzC,QAAA,KAAK,MAAM,aAAa,IAAI,GAAG,CAAC,cAAc,EAAE;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;AAAE,gBAAA,OAAO,IAAI;QAC/C;AACA,QAAA,OAAO,KAAK;IACd;;AAGS,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;AAC3B,QAAA,MAAM,QAAQ,GAAuB,KAAK,CAAC,OAAO,CAAC,GAAG;AACpD,cAAE;AACF,cAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK;AACxB,kBAAE;AACF,kBAAE,CAAC,GAAG,CAAC;AACX,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;AACpD,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAC,MAAM,WAAW;QACtC;;AAEA,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC;QACxC,IAAI,WAAW,KAAK,SAAS;AAAE,YAAA,OAAO,WAAW;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAA2B,CAAC;AAC5E,QAAA,OAAO,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC;IAC7B,CAAC;qFAAC;IAEM,UAAU,CAAC,KAAc,EAAE,KAA4B,EAAA;AAC7D,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK;AAC3C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACnD,IAAI,KAAK,KAAK,SAAS;AAAE,oBAAA,OAAO,KAAK;YACvC;QACF;AACA,QAAA,OAAO,SAAS;IAClB;uGA3EW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,+CAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxCtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,i7IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/BS,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtHvC,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA+JzB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA9DjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,cAAA,EACA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,YAAY;AACvB,4BAAA,MAAM,EAAE;gCACN,SAAS;gCACT,iBAAiB;gCACjB,SAAS;gCACT,gBAAgB;AACjB,6BAAA;AACD,4BAAA,OAAO,EAAE;gCACP,eAAe;gCACf,sBAAsB;gCACtB,cAAc;gCACd,cAAc;gCACd,gBAAgB;AACjB,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,EAAA,QAAA,EACpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,mBAAmB,EAAE,+CAA+C;qBACrE,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,i7IAAA,CAAA,EAAA;;;AC7QjD;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACO,MAAM,qBAAqB,GAAG;;ACDrC;;AAEG;;;;"}
|