@neural-ui/core 1.7.1 → 1.7.3
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/bottom-sheet/package.json +4 -0
- package/confirm-popup/package.json +4 -0
- package/data-view/package.json +4 -0
- package/fesm2022/neural-ui-core-alert.mjs +48 -21
- package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
- package/fesm2022/neural-ui-core-autocomplete.mjs +153 -71
- package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
- package/fesm2022/neural-ui-core-block-ui.mjs +2 -2
- package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
- package/fesm2022/neural-ui-core-bottom-sheet.mjs +121 -0
- package/fesm2022/neural-ui-core-bottom-sheet.mjs.map +1 -0
- package/fesm2022/neural-ui-core-breadcrumb.mjs +2 -2
- package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/neural-ui-core-button.mjs +2 -2
- package/fesm2022/neural-ui-core-button.mjs.map +1 -1
- package/fesm2022/neural-ui-core-calendar.mjs +2 -2
- package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
- package/fesm2022/neural-ui-core-checkbox.mjs +69 -39
- package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
- package/fesm2022/neural-ui-core-chip.mjs +2 -2
- package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
- package/fesm2022/neural-ui-core-code-block.mjs +2 -2
- package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
- package/fesm2022/neural-ui-core-confirm-popup.mjs +105 -0
- package/fesm2022/neural-ui-core-confirm-popup.mjs.map +1 -0
- package/fesm2022/neural-ui-core-dashboard-grid.mjs +9 -3
- package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
- package/fesm2022/neural-ui-core-data-view.mjs +386 -0
- package/fesm2022/neural-ui-core-data-view.mjs.map +1 -0
- package/fesm2022/neural-ui-core-date-input.mjs +185 -10
- package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
- package/fesm2022/neural-ui-core-empty-state.mjs +19 -5
- package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
- package/fesm2022/neural-ui-core-form-field.mjs +81 -0
- package/fesm2022/neural-ui-core-form-field.mjs.map +1 -0
- package/fesm2022/neural-ui-core-inline-editor.mjs +428 -0
- package/fesm2022/neural-ui-core-inline-editor.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input-mask.mjs +110 -0
- package/fesm2022/neural-ui-core-input-mask.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input.mjs +2 -2
- package/fesm2022/neural-ui-core-input.mjs.map +1 -1
- package/fesm2022/neural-ui-core-listbox.mjs +219 -0
- package/fesm2022/neural-ui-core-listbox.mjs.map +1 -0
- package/fesm2022/neural-ui-core-menu.mjs +229 -0
- package/fesm2022/neural-ui-core-menu.mjs.map +1 -0
- package/fesm2022/neural-ui-core-modal.mjs +34 -10
- package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
- package/fesm2022/neural-ui-core-multiselect.mjs +170 -179
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
- package/fesm2022/neural-ui-core-number-input.mjs +2 -2
- package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
- package/fesm2022/neural-ui-core-panel.mjs +92 -0
- package/fesm2022/neural-ui-core-panel.mjs.map +1 -0
- package/fesm2022/neural-ui-core-password.mjs +106 -0
- package/fesm2022/neural-ui-core-password.mjs.map +1 -0
- package/fesm2022/neural-ui-core-pick-list.mjs +133 -0
- package/fesm2022/neural-ui-core-pick-list.mjs.map +1 -0
- package/fesm2022/neural-ui-core-select.mjs +128 -166
- package/fesm2022/neural-ui-core-select.mjs.map +1 -1
- package/fesm2022/neural-ui-core-sidebar.mjs +14 -3
- package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
- package/fesm2022/neural-ui-core-slider.mjs +2 -2
- package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
- package/fesm2022/neural-ui-core-spinner.mjs +19 -9
- package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
- package/fesm2022/neural-ui-core-split-button.mjs +2 -2
- package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
- package/fesm2022/neural-ui-core-table.mjs +503 -62
- package/fesm2022/neural-ui-core-table.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tabs.mjs +11 -4
- package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tags.mjs +134 -0
- package/fesm2022/neural-ui-core-tags.mjs.map +1 -0
- package/fesm2022/neural-ui-core-textarea.mjs +2 -2
- package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
- package/fesm2022/neural-ui-core-toggle-button-group.mjs +2 -2
- package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
- package/fesm2022/neural-ui-core-toolbar.mjs +16 -4
- package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tree-select.mjs +259 -0
- package/fesm2022/neural-ui-core-tree-select.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tree-table.mjs +267 -8
- package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tree.mjs +15 -14
- package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
- package/fesm2022/neural-ui-core-uploader.mjs +103 -12
- package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
- package/form-field/package.json +4 -0
- package/inline-editor/package.json +4 -0
- package/input-mask/package.json +4 -0
- package/listbox/package.json +4 -0
- package/menu/package.json +4 -0
- package/package.json +53 -1
- package/panel/package.json +4 -0
- package/password/package.json +4 -0
- package/pick-list/package.json +4 -0
- package/styles/_tokens.scss +33 -17
- package/tags/package.json +4 -0
- package/tree-select/package.json +4 -0
- package/types/neural-ui-core-alert.d.ts +2 -1
- package/types/neural-ui-core-autocomplete.d.ts +22 -2
- package/types/neural-ui-core-bottom-sheet.d.ts +20 -0
- package/types/neural-ui-core-checkbox.d.ts +6 -1
- package/types/neural-ui-core-confirm-popup.d.ts +38 -0
- package/types/neural-ui-core-dashboard-grid.d.ts +1 -0
- package/types/neural-ui-core-data-view.d.ts +95 -0
- package/types/neural-ui-core-date-input.d.ts +35 -5
- package/types/neural-ui-core-empty-state.d.ts +11 -1
- package/types/neural-ui-core-form-field.d.ts +33 -0
- package/types/neural-ui-core-inline-editor.d.ts +66 -0
- package/types/neural-ui-core-input-mask.d.ts +26 -0
- package/types/neural-ui-core-listbox.d.ts +54 -0
- package/types/neural-ui-core-menu.d.ts +49 -0
- package/types/neural-ui-core-modal.d.ts +10 -2
- package/types/neural-ui-core-multiselect.d.ts +10 -1
- package/types/neural-ui-core-panel.d.ts +25 -0
- package/types/neural-ui-core-password.d.ts +29 -0
- package/types/neural-ui-core-pick-list.d.ts +40 -0
- package/types/neural-ui-core-select.d.ts +7 -1
- package/types/neural-ui-core-sidebar.d.ts +5 -1
- package/types/neural-ui-core-spinner.d.ts +4 -2
- package/types/neural-ui-core-table.d.ts +89 -5
- package/types/neural-ui-core-tabs.d.ts +2 -0
- package/types/neural-ui-core-tags.d.ts +32 -0
- package/types/neural-ui-core-toolbar.d.ts +8 -2
- package/types/neural-ui-core-tree-select.d.ts +57 -0
- package/types/neural-ui-core-tree-table.d.ts +111 -4
- package/types/neural-ui-core-tree.d.ts +1 -1
- package/types/neural-ui-core-uploader.d.ts +26 -3
|
@@ -375,7 +375,7 @@ class NeuCalendarComponent {
|
|
|
375
375
|
}
|
|
376
376
|
</section>
|
|
377
377
|
</div>
|
|
378
|
-
`, isInline: true, styles: [".neu-calendar{display:grid;gap:var(--neu-space-4);padding:var(--neu-space-4);overflow:hidden;border-radius:calc(var(--neu-radius-lg) + 4px);background:radial-gradient(circle at top left,color-mix(in srgb,var(--neu-primary) 6%,transparent 94%),transparent 30%),linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 82%,var(--neu-surface) 18%),var(--neu-surface));border:1px solid color-mix(in srgb,var(--neu-border) 92%,transparent 8%);box-shadow:var(--neu-shadow-sm)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:800px}.neu-calendar--month .neu-calendar__month-grid{grid-auto-rows:172px}.neu-calendar--month .neu-calendar__day{min-height:0;height:100%}.neu-calendar--month .neu-calendar__event-list{max-height:100%}.neu-calendar--week .neu-calendar__weekdays,.neu-calendar--week .neu-calendar__week-grid{min-width:0}.neu-calendar__viewport{display:grid;gap:8px;overflow-x:auto;overflow-y:hidden;min-width:0;scrollbar-gutter:stable}.neu-calendar__viewport{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__viewport::-webkit-scrollbar{height:8px}.neu-calendar__viewport::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-4);flex-wrap:wrap}.neu-calendar__nav{display:inline-flex;align-items:center;gap:var(--neu-space-2)}.neu-calendar__title{margin:0;font-size:clamp(1.05rem,1vw + .9rem,1.35rem);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__nav-btn{min-width:36px;height:36px;border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface) 88%,var(--neu-surface-2) 12%);color:var(--neu-text);cursor:pointer;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__nav-btn:hover,.neu-calendar__today:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--neu-primary) 45%,var(--neu-border) 55%)}.neu-calendar__today{height:36px;padding:0 var(--neu-space-3);border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface-2) 92%,var(--neu-surface) 8%);color:var(--neu-text);cursor:pointer;font-weight:600;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__weekdays,.neu-calendar__month-grid,.neu-calendar__week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;background:transparent;border:none;border-radius:0;overflow:visible}.neu-calendar__weekday{padding:0 8px 6px;text-align:center;background:transparent;color:var(--neu-text-muted);font-size:var(--neu-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.neu-calendar__day{min-height:110px;padding:10px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 96%,var(--neu-surface-2) 4%),color-mix(in srgb,var(--neu-surface) 88%,black 12%));display:grid;grid-template-rows:auto minmax(0,1fr);align-content:start;gap:var(--neu-space-2);cursor:pointer;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%);transition:background var(--neu-transition),box-shadow var(--neu-transition),border-color var(--neu-transition),transform var(--neu-transition)}.neu-calendar__day--outside{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 90%,black 10%),color-mix(in srgb,var(--neu-surface-2) 82%,black 18%));box-shadow:none;opacity:.72}.neu-calendar__day--today{border-color:color-mix(in srgb,var(--neu-primary) 36%,var(--neu-border) 64%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%),color-mix(in srgb,var(--neu-primary) 6%,var(--neu-surface) 94%));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 26px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day--selected{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 14%,var(--neu-surface) 86%),color-mix(in srgb,var(--neu-primary) 8%,var(--neu-surface) 92%));border-color:color-mix(in srgb,var(--neu-primary) 38%,var(--neu-border) 62%);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 24px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day:hover,.neu-calendar__week-day:hover{background:color-mix(in srgb,var(--neu-primary) 4%,var(--neu-surface) 96%);border-color:color-mix(in srgb,var(--neu-primary) 22%,var(--neu-border) 78%);transform:translateY(-1px)}.neu-calendar__day-select:focus-visible,.neu-calendar__event:focus-visible,.neu-calendar__nav-btn:focus-visible,.neu-calendar__today:focus-visible{outline:2px solid color-mix(in srgb,var(--neu-primary) 75%,white 25%);outline-offset:-2px}.neu-calendar__day-top{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);min-width:0}.neu-calendar__day-select{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);width:100%;min-width:0;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.neu-calendar__day-count{display:inline-flex;align-items:center;min-height:22px;padding:0 8px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700;flex-shrink:0}.neu-calendar__day-number{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;font-size:var(--neu-text-sm);color:var(--neu-text)}.neu-calendar__day--selected .neu-calendar__day-number{background:color-mix(in srgb,var(--neu-primary) 78%,black 22%);color:#fff}.neu-calendar__event-list{display:grid;gap:4px;align-content:start;overflow-x:hidden;overflow-y:auto;min-height:0;min-width:0;width:100%;padding-right:2px;scrollbar-gutter:stable}.neu-calendar__event-list{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__event-list::-webkit-scrollbar{width:6px}.neu-calendar__event-list::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__event{display:grid;gap:2px;width:100%;justify-self:stretch;align-self:start;padding:8px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-left:2px solid var(--neu-primary);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 46%,var(--neu-surface) 54%),color-mix(in srgb,var(--neu-surface) 74%,black 26%));text-align:left;cursor:pointer;box-shadow:inset 0 1px color-mix(in srgb,white 6%,transparent 94%),0 10px 18px -20px color-mix(in srgb,black 34%,transparent 66%);min-width:0;box-sizing:border-box;max-width:100%;overflow:hidden}.neu-calendar__event--compact{gap:1px;padding:5px 6px;border-radius:12px;box-shadow:none}.neu-calendar__event--compact .neu-calendar__event-title,.neu-calendar__event--compact .neu-calendar__event-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event--compact .neu-calendar__event-title{font-size:11px}.neu-calendar__event--compact .neu-calendar__event-meta{font-size:10px}.neu-calendar__event--default{border-left-color:var(--neu-primary)}.neu-calendar__event--success{border-left-color:var(--neu-success)}.neu-calendar__event--warning{border-left-color:var(--neu-warning)}.neu-calendar__event--danger{border-left-color:var(--neu-danger)}.neu-calendar__event--info{border-left-color:#0ea5e9}.neu-calendar__event-title{font-size:var(--neu-text-xs);font-weight:700;color:var(--neu-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event-meta{font-size:11px;color:var(--neu-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__more{display:inline-flex;align-items:center;justify-content:center;min-height:28px;width:100%;padding:0 8px;border-radius:12px;border:1px dashed color-mix(in srgb,var(--neu-border) 92%,transparent 8%);background:color-mix(in srgb,var(--neu-surface-2) 72%,var(--neu-surface) 28%);font-size:11px;color:var(--neu-text-muted);box-sizing:border-box}.neu-calendar__more--summary{font-weight:700;letter-spacing:.01em}.neu-calendar__agenda{display:grid;gap:var(--neu-space-3);padding:14px;min-width:0;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 86%,black 14%));box-shadow:0 12px 24px -24px color-mix(in srgb,black 28%,transparent 72%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__agenda-header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-3);flex-wrap:wrap}.neu-calendar__agenda-title{margin:0;font-size:var(--neu-text-base);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__agenda-count{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700}.neu-calendar__agenda-list{display:grid;gap:8px}.neu-calendar__agenda-event{min-height:48px}.neu-calendar__agenda-empty{margin:0;color:var(--neu-text-muted);font-size:var(--neu-text-sm)}.neu-calendar__week-day{min-height:220px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 84%,black 16%));display:grid;grid-template-rows:auto 1fr;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__week-head{display:grid;gap:4px;width:100%;padding:14px 12px 12px;border:0;border-bottom:1px solid color-mix(in srgb,var(--neu-border) 90%,transparent 10%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 78%,transparent 22%),transparent);border-radius:18px 18px 0 0;cursor:pointer}.neu-calendar__week-date{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-calendar__week-events{scrollbar-width:none}.neu-calendar__week-events::-webkit-scrollbar{display:none}.neu-calendar__week-events{padding:12px;display:grid;align-content:start;gap:var(--neu-space-2);overflow:hidden;min-height:0;min-width:0}.neu-calendar__empty{margin:0;font-size:var(--neu-text-sm);color:var(--neu-text-muted);line-height:1.35}@media(max-width:860px){.neu-calendar{padding:var(--neu-space-3)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:760px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
378
|
+
`, isInline: true, styles: [".neu-calendar{display:grid;gap:var(--neu-space-4);padding:var(--neu-space-4);overflow:hidden;border-radius:calc(var(--neu-radius-lg) + 4px);background:radial-gradient(circle at top left,color-mix(in srgb,var(--neu-primary) 6%,transparent 94%),transparent 30%),linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 82%,var(--neu-surface) 18%),var(--neu-surface));border:1px solid color-mix(in srgb,var(--neu-border) 92%,transparent 8%);box-shadow:var(--neu-shadow-sm)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:800px}.neu-calendar--month .neu-calendar__month-grid{grid-auto-rows:172px}.neu-calendar--month .neu-calendar__day{min-height:0;height:100%}.neu-calendar--month .neu-calendar__event-list{max-height:100%}.neu-calendar--week .neu-calendar__weekdays,.neu-calendar--week .neu-calendar__week-grid{min-width:0}.neu-calendar__viewport{display:grid;gap:8px;overflow-x:auto;overflow-y:hidden;min-width:0;scrollbar-gutter:stable}.neu-calendar__viewport{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__viewport::-webkit-scrollbar{height:8px}.neu-calendar__viewport::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-4);flex-wrap:wrap}.neu-calendar__nav{display:inline-flex;align-items:center;gap:var(--neu-space-2)}.neu-calendar__title{margin:0;font-size:clamp(1.05rem,1vw + .9rem,1.35rem);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__nav-btn{min-width:36px;height:36px;border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface) 88%,var(--neu-surface-2) 12%);color:var(--neu-text);cursor:pointer;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__nav-btn:hover,.neu-calendar__today:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--neu-primary) 45%,var(--neu-border) 55%)}.neu-calendar__today{height:36px;padding:0 var(--neu-space-3);border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface-2) 92%,var(--neu-surface) 8%);color:var(--neu-text);cursor:pointer;font-weight:600;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}html[data-theme=dark] .neu-calendar__today{color:#f2f7fb;background:#21262d;border-color:#6e7681}.neu-calendar__weekdays,.neu-calendar__month-grid,.neu-calendar__week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;background:transparent;border:none;border-radius:0;overflow:visible}.neu-calendar__weekday{padding:0 8px 6px;text-align:center;background:transparent;color:var(--neu-text-muted);font-size:var(--neu-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.neu-calendar__day{min-height:110px;padding:10px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 96%,var(--neu-surface-2) 4%),color-mix(in srgb,var(--neu-surface) 88%,black 12%));display:grid;grid-template-rows:auto minmax(0,1fr);align-content:start;gap:var(--neu-space-2);cursor:pointer;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%);transition:background var(--neu-transition),box-shadow var(--neu-transition),border-color var(--neu-transition),transform var(--neu-transition)}.neu-calendar__day--outside{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 90%,black 10%),color-mix(in srgb,var(--neu-surface-2) 82%,black 18%));box-shadow:none;opacity:.72}.neu-calendar__day--today{border-color:color-mix(in srgb,var(--neu-primary) 36%,var(--neu-border) 64%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%),color-mix(in srgb,var(--neu-primary) 6%,var(--neu-surface) 94%));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 26px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day--selected{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 14%,var(--neu-surface) 86%),color-mix(in srgb,var(--neu-primary) 8%,var(--neu-surface) 92%));border-color:color-mix(in srgb,var(--neu-primary) 38%,var(--neu-border) 62%);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 24px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day:hover,.neu-calendar__week-day:hover{background:color-mix(in srgb,var(--neu-primary) 4%,var(--neu-surface) 96%);border-color:color-mix(in srgb,var(--neu-primary) 22%,var(--neu-border) 78%);transform:translateY(-1px)}.neu-calendar__day-select:focus-visible,.neu-calendar__event:focus-visible,.neu-calendar__nav-btn:focus-visible,.neu-calendar__today:focus-visible{outline:2px solid color-mix(in srgb,var(--neu-primary) 75%,white 25%);outline-offset:-2px}.neu-calendar__day-top{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);min-width:0}.neu-calendar__day-select{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);width:100%;min-width:0;box-sizing:border-box;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.neu-calendar__day-count{display:inline-flex;align-items:center;min-height:22px;padding:0 8px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700;flex-shrink:0}.neu-calendar__day-number{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;font-size:var(--neu-text-sm);color:var(--neu-text)}.neu-calendar__day--selected .neu-calendar__day-number{background:color-mix(in srgb,var(--neu-primary) 78%,black 22%);color:#fff}.neu-calendar__event-list{display:grid;gap:4px;align-content:start;overflow-x:hidden;overflow-y:auto;min-height:0;min-width:0;width:100%;padding-right:2px;scrollbar-gutter:stable}.neu-calendar__event-list{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__event-list::-webkit-scrollbar{width:6px}.neu-calendar__event-list::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__event{display:grid;gap:2px;width:100%;justify-self:stretch;align-self:start;padding:8px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-left:2px solid var(--neu-primary);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 46%,var(--neu-surface) 54%),color-mix(in srgb,var(--neu-surface) 74%,black 26%));text-align:left;cursor:pointer;box-shadow:inset 0 1px color-mix(in srgb,white 6%,transparent 94%),0 10px 18px -20px color-mix(in srgb,black 34%,transparent 66%);min-width:0;box-sizing:border-box;max-width:100%;overflow:hidden}.neu-calendar__event--compact{gap:1px;padding:5px 6px;border-radius:12px;box-shadow:none}.neu-calendar__event--compact .neu-calendar__event-title,.neu-calendar__event--compact .neu-calendar__event-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event--compact .neu-calendar__event-title{font-size:11px}.neu-calendar__event--compact .neu-calendar__event-meta{font-size:10px}.neu-calendar__event--default{border-left-color:var(--neu-primary)}.neu-calendar__event--success{border-left-color:var(--neu-success)}.neu-calendar__event--warning{border-left-color:var(--neu-warning)}.neu-calendar__event--danger{border-left-color:var(--neu-danger)}.neu-calendar__event--info{border-left-color:#0ea5e9}.neu-calendar__event-title{font-size:var(--neu-text-xs);font-weight:700;color:var(--neu-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event-meta{font-size:11px;color:var(--neu-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__more{display:inline-flex;align-items:center;justify-content:center;min-height:28px;width:100%;padding:0 8px;border-radius:12px;border:1px dashed color-mix(in srgb,var(--neu-border) 92%,transparent 8%);background:color-mix(in srgb,var(--neu-surface-2) 72%,var(--neu-surface) 28%);font-size:11px;color:var(--neu-text-muted);box-sizing:border-box}.neu-calendar__more--summary{font-weight:700;letter-spacing:.01em}.neu-calendar__agenda{display:grid;gap:var(--neu-space-3);padding:14px;min-width:0;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 86%,black 14%));box-shadow:0 12px 24px -24px color-mix(in srgb,black 28%,transparent 72%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__agenda-header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-3);flex-wrap:wrap}.neu-calendar__agenda-title{margin:0;font-size:var(--neu-text-base);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__agenda-count{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700}.neu-calendar__agenda-list{display:grid;gap:8px}.neu-calendar__agenda-event{min-height:48px}.neu-calendar__agenda-empty{margin:0;color:var(--neu-text-muted);font-size:var(--neu-text-sm)}.neu-calendar__week-day{min-height:220px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 84%,black 16%));display:grid;grid-template-rows:auto 1fr;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__week-head{display:grid;justify-items:center;gap:4px;width:100%;min-width:0;box-sizing:border-box;padding:12px 6px 10px;border:0;border-bottom:1px solid color-mix(in srgb,var(--neu-border) 90%,transparent 10%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 78%,transparent 22%),transparent);border-radius:18px 18px 0 0;cursor:pointer}.neu-calendar__week-date{font-size:var(--neu-text-xs);color:var(--neu-text-muted);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.neu-calendar__week-events{scrollbar-width:none}.neu-calendar__week-events::-webkit-scrollbar{display:none}.neu-calendar__week-events{padding:12px;display:grid;align-content:start;gap:var(--neu-space-2);overflow:hidden;min-height:0;min-width:0}.neu-calendar__empty{margin:0;font-size:var(--neu-text-sm);color:var(--neu-text-muted);line-height:1.35}@media(max-width:860px){.neu-calendar{padding:var(--neu-space-3)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:760px}.neu-calendar__week-head{padding:10px 3px 8px}.neu-calendar__week-head .neu-calendar__day-number{width:28px;height:28px}.neu-calendar__week-date{font-size:11px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
379
379
|
}
|
|
380
380
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCalendarComponent, decorators: [{
|
|
381
381
|
type: Component,
|
|
@@ -548,7 +548,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
548
548
|
}
|
|
549
549
|
</section>
|
|
550
550
|
</div>
|
|
551
|
-
`, styles: [".neu-calendar{display:grid;gap:var(--neu-space-4);padding:var(--neu-space-4);overflow:hidden;border-radius:calc(var(--neu-radius-lg) + 4px);background:radial-gradient(circle at top left,color-mix(in srgb,var(--neu-primary) 6%,transparent 94%),transparent 30%),linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 82%,var(--neu-surface) 18%),var(--neu-surface));border:1px solid color-mix(in srgb,var(--neu-border) 92%,transparent 8%);box-shadow:var(--neu-shadow-sm)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:800px}.neu-calendar--month .neu-calendar__month-grid{grid-auto-rows:172px}.neu-calendar--month .neu-calendar__day{min-height:0;height:100%}.neu-calendar--month .neu-calendar__event-list{max-height:100%}.neu-calendar--week .neu-calendar__weekdays,.neu-calendar--week .neu-calendar__week-grid{min-width:0}.neu-calendar__viewport{display:grid;gap:8px;overflow-x:auto;overflow-y:hidden;min-width:0;scrollbar-gutter:stable}.neu-calendar__viewport{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__viewport::-webkit-scrollbar{height:8px}.neu-calendar__viewport::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-4);flex-wrap:wrap}.neu-calendar__nav{display:inline-flex;align-items:center;gap:var(--neu-space-2)}.neu-calendar__title{margin:0;font-size:clamp(1.05rem,1vw + .9rem,1.35rem);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__nav-btn{min-width:36px;height:36px;border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface) 88%,var(--neu-surface-2) 12%);color:var(--neu-text);cursor:pointer;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__nav-btn:hover,.neu-calendar__today:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--neu-primary) 45%,var(--neu-border) 55%)}.neu-calendar__today{height:36px;padding:0 var(--neu-space-3);border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface-2) 92%,var(--neu-surface) 8%);color:var(--neu-text);cursor:pointer;font-weight:600;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__weekdays,.neu-calendar__month-grid,.neu-calendar__week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;background:transparent;border:none;border-radius:0;overflow:visible}.neu-calendar__weekday{padding:0 8px 6px;text-align:center;background:transparent;color:var(--neu-text-muted);font-size:var(--neu-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.neu-calendar__day{min-height:110px;padding:10px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 96%,var(--neu-surface-2) 4%),color-mix(in srgb,var(--neu-surface) 88%,black 12%));display:grid;grid-template-rows:auto minmax(0,1fr);align-content:start;gap:var(--neu-space-2);cursor:pointer;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%);transition:background var(--neu-transition),box-shadow var(--neu-transition),border-color var(--neu-transition),transform var(--neu-transition)}.neu-calendar__day--outside{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 90%,black 10%),color-mix(in srgb,var(--neu-surface-2) 82%,black 18%));box-shadow:none;opacity:.72}.neu-calendar__day--today{border-color:color-mix(in srgb,var(--neu-primary) 36%,var(--neu-border) 64%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%),color-mix(in srgb,var(--neu-primary) 6%,var(--neu-surface) 94%));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 26px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day--selected{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 14%,var(--neu-surface) 86%),color-mix(in srgb,var(--neu-primary) 8%,var(--neu-surface) 92%));border-color:color-mix(in srgb,var(--neu-primary) 38%,var(--neu-border) 62%);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 24px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day:hover,.neu-calendar__week-day:hover{background:color-mix(in srgb,var(--neu-primary) 4%,var(--neu-surface) 96%);border-color:color-mix(in srgb,var(--neu-primary) 22%,var(--neu-border) 78%);transform:translateY(-1px)}.neu-calendar__day-select:focus-visible,.neu-calendar__event:focus-visible,.neu-calendar__nav-btn:focus-visible,.neu-calendar__today:focus-visible{outline:2px solid color-mix(in srgb,var(--neu-primary) 75%,white 25%);outline-offset:-2px}.neu-calendar__day-top{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);min-width:0}.neu-calendar__day-select{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);width:100%;min-width:0;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.neu-calendar__day-count{display:inline-flex;align-items:center;min-height:22px;padding:0 8px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700;flex-shrink:0}.neu-calendar__day-number{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;font-size:var(--neu-text-sm);color:var(--neu-text)}.neu-calendar__day--selected .neu-calendar__day-number{background:color-mix(in srgb,var(--neu-primary) 78%,black 22%);color:#fff}.neu-calendar__event-list{display:grid;gap:4px;align-content:start;overflow-x:hidden;overflow-y:auto;min-height:0;min-width:0;width:100%;padding-right:2px;scrollbar-gutter:stable}.neu-calendar__event-list{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__event-list::-webkit-scrollbar{width:6px}.neu-calendar__event-list::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__event{display:grid;gap:2px;width:100%;justify-self:stretch;align-self:start;padding:8px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-left:2px solid var(--neu-primary);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 46%,var(--neu-surface) 54%),color-mix(in srgb,var(--neu-surface) 74%,black 26%));text-align:left;cursor:pointer;box-shadow:inset 0 1px color-mix(in srgb,white 6%,transparent 94%),0 10px 18px -20px color-mix(in srgb,black 34%,transparent 66%);min-width:0;box-sizing:border-box;max-width:100%;overflow:hidden}.neu-calendar__event--compact{gap:1px;padding:5px 6px;border-radius:12px;box-shadow:none}.neu-calendar__event--compact .neu-calendar__event-title,.neu-calendar__event--compact .neu-calendar__event-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event--compact .neu-calendar__event-title{font-size:11px}.neu-calendar__event--compact .neu-calendar__event-meta{font-size:10px}.neu-calendar__event--default{border-left-color:var(--neu-primary)}.neu-calendar__event--success{border-left-color:var(--neu-success)}.neu-calendar__event--warning{border-left-color:var(--neu-warning)}.neu-calendar__event--danger{border-left-color:var(--neu-danger)}.neu-calendar__event--info{border-left-color:#0ea5e9}.neu-calendar__event-title{font-size:var(--neu-text-xs);font-weight:700;color:var(--neu-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event-meta{font-size:11px;color:var(--neu-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__more{display:inline-flex;align-items:center;justify-content:center;min-height:28px;width:100%;padding:0 8px;border-radius:12px;border:1px dashed color-mix(in srgb,var(--neu-border) 92%,transparent 8%);background:color-mix(in srgb,var(--neu-surface-2) 72%,var(--neu-surface) 28%);font-size:11px;color:var(--neu-text-muted);box-sizing:border-box}.neu-calendar__more--summary{font-weight:700;letter-spacing:.01em}.neu-calendar__agenda{display:grid;gap:var(--neu-space-3);padding:14px;min-width:0;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 86%,black 14%));box-shadow:0 12px 24px -24px color-mix(in srgb,black 28%,transparent 72%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__agenda-header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-3);flex-wrap:wrap}.neu-calendar__agenda-title{margin:0;font-size:var(--neu-text-base);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__agenda-count{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700}.neu-calendar__agenda-list{display:grid;gap:8px}.neu-calendar__agenda-event{min-height:48px}.neu-calendar__agenda-empty{margin:0;color:var(--neu-text-muted);font-size:var(--neu-text-sm)}.neu-calendar__week-day{min-height:220px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 84%,black 16%));display:grid;grid-template-rows:auto 1fr;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__week-head{display:grid;gap:4px;width:100%;padding:14px 12px 12px;border:0;border-bottom:1px solid color-mix(in srgb,var(--neu-border) 90%,transparent 10%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 78%,transparent 22%),transparent);border-radius:18px 18px 0 0;cursor:pointer}.neu-calendar__week-date{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-calendar__week-events{scrollbar-width:none}.neu-calendar__week-events::-webkit-scrollbar{display:none}.neu-calendar__week-events{padding:12px;display:grid;align-content:start;gap:var(--neu-space-2);overflow:hidden;min-height:0;min-width:0}.neu-calendar__empty{margin:0;font-size:var(--neu-text-sm);color:var(--neu-text-muted);line-height:1.35}@media(max-width:860px){.neu-calendar{padding:var(--neu-space-3)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:760px}}\n"] }]
|
|
551
|
+
`, styles: [".neu-calendar{display:grid;gap:var(--neu-space-4);padding:var(--neu-space-4);overflow:hidden;border-radius:calc(var(--neu-radius-lg) + 4px);background:radial-gradient(circle at top left,color-mix(in srgb,var(--neu-primary) 6%,transparent 94%),transparent 30%),linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 82%,var(--neu-surface) 18%),var(--neu-surface));border:1px solid color-mix(in srgb,var(--neu-border) 92%,transparent 8%);box-shadow:var(--neu-shadow-sm)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:800px}.neu-calendar--month .neu-calendar__month-grid{grid-auto-rows:172px}.neu-calendar--month .neu-calendar__day{min-height:0;height:100%}.neu-calendar--month .neu-calendar__event-list{max-height:100%}.neu-calendar--week .neu-calendar__weekdays,.neu-calendar--week .neu-calendar__week-grid{min-width:0}.neu-calendar__viewport{display:grid;gap:8px;overflow-x:auto;overflow-y:hidden;min-width:0;scrollbar-gutter:stable}.neu-calendar__viewport{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__viewport::-webkit-scrollbar{height:8px}.neu-calendar__viewport::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-4);flex-wrap:wrap}.neu-calendar__nav{display:inline-flex;align-items:center;gap:var(--neu-space-2)}.neu-calendar__title{margin:0;font-size:clamp(1.05rem,1vw + .9rem,1.35rem);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__nav-btn{min-width:36px;height:36px;border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface) 88%,var(--neu-surface-2) 12%);color:var(--neu-text);cursor:pointer;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__nav-btn:hover,.neu-calendar__today:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--neu-primary) 45%,var(--neu-border) 55%)}.neu-calendar__today{height:36px;padding:0 var(--neu-space-3);border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface-2) 92%,var(--neu-surface) 8%);color:var(--neu-text);cursor:pointer;font-weight:600;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}html[data-theme=dark] .neu-calendar__today{color:#f2f7fb;background:#21262d;border-color:#6e7681}.neu-calendar__weekdays,.neu-calendar__month-grid,.neu-calendar__week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;background:transparent;border:none;border-radius:0;overflow:visible}.neu-calendar__weekday{padding:0 8px 6px;text-align:center;background:transparent;color:var(--neu-text-muted);font-size:var(--neu-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.neu-calendar__day{min-height:110px;padding:10px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 96%,var(--neu-surface-2) 4%),color-mix(in srgb,var(--neu-surface) 88%,black 12%));display:grid;grid-template-rows:auto minmax(0,1fr);align-content:start;gap:var(--neu-space-2);cursor:pointer;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%);transition:background var(--neu-transition),box-shadow var(--neu-transition),border-color var(--neu-transition),transform var(--neu-transition)}.neu-calendar__day--outside{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 90%,black 10%),color-mix(in srgb,var(--neu-surface-2) 82%,black 18%));box-shadow:none;opacity:.72}.neu-calendar__day--today{border-color:color-mix(in srgb,var(--neu-primary) 36%,var(--neu-border) 64%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%),color-mix(in srgb,var(--neu-primary) 6%,var(--neu-surface) 94%));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 26px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day--selected{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 14%,var(--neu-surface) 86%),color-mix(in srgb,var(--neu-primary) 8%,var(--neu-surface) 92%));border-color:color-mix(in srgb,var(--neu-primary) 38%,var(--neu-border) 62%);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 24px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day:hover,.neu-calendar__week-day:hover{background:color-mix(in srgb,var(--neu-primary) 4%,var(--neu-surface) 96%);border-color:color-mix(in srgb,var(--neu-primary) 22%,var(--neu-border) 78%);transform:translateY(-1px)}.neu-calendar__day-select:focus-visible,.neu-calendar__event:focus-visible,.neu-calendar__nav-btn:focus-visible,.neu-calendar__today:focus-visible{outline:2px solid color-mix(in srgb,var(--neu-primary) 75%,white 25%);outline-offset:-2px}.neu-calendar__day-top{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);min-width:0}.neu-calendar__day-select{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);width:100%;min-width:0;box-sizing:border-box;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.neu-calendar__day-count{display:inline-flex;align-items:center;min-height:22px;padding:0 8px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700;flex-shrink:0}.neu-calendar__day-number{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;font-size:var(--neu-text-sm);color:var(--neu-text)}.neu-calendar__day--selected .neu-calendar__day-number{background:color-mix(in srgb,var(--neu-primary) 78%,black 22%);color:#fff}.neu-calendar__event-list{display:grid;gap:4px;align-content:start;overflow-x:hidden;overflow-y:auto;min-height:0;min-width:0;width:100%;padding-right:2px;scrollbar-gutter:stable}.neu-calendar__event-list{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__event-list::-webkit-scrollbar{width:6px}.neu-calendar__event-list::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__event{display:grid;gap:2px;width:100%;justify-self:stretch;align-self:start;padding:8px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-left:2px solid var(--neu-primary);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 46%,var(--neu-surface) 54%),color-mix(in srgb,var(--neu-surface) 74%,black 26%));text-align:left;cursor:pointer;box-shadow:inset 0 1px color-mix(in srgb,white 6%,transparent 94%),0 10px 18px -20px color-mix(in srgb,black 34%,transparent 66%);min-width:0;box-sizing:border-box;max-width:100%;overflow:hidden}.neu-calendar__event--compact{gap:1px;padding:5px 6px;border-radius:12px;box-shadow:none}.neu-calendar__event--compact .neu-calendar__event-title,.neu-calendar__event--compact .neu-calendar__event-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event--compact .neu-calendar__event-title{font-size:11px}.neu-calendar__event--compact .neu-calendar__event-meta{font-size:10px}.neu-calendar__event--default{border-left-color:var(--neu-primary)}.neu-calendar__event--success{border-left-color:var(--neu-success)}.neu-calendar__event--warning{border-left-color:var(--neu-warning)}.neu-calendar__event--danger{border-left-color:var(--neu-danger)}.neu-calendar__event--info{border-left-color:#0ea5e9}.neu-calendar__event-title{font-size:var(--neu-text-xs);font-weight:700;color:var(--neu-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event-meta{font-size:11px;color:var(--neu-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__more{display:inline-flex;align-items:center;justify-content:center;min-height:28px;width:100%;padding:0 8px;border-radius:12px;border:1px dashed color-mix(in srgb,var(--neu-border) 92%,transparent 8%);background:color-mix(in srgb,var(--neu-surface-2) 72%,var(--neu-surface) 28%);font-size:11px;color:var(--neu-text-muted);box-sizing:border-box}.neu-calendar__more--summary{font-weight:700;letter-spacing:.01em}.neu-calendar__agenda{display:grid;gap:var(--neu-space-3);padding:14px;min-width:0;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 86%,black 14%));box-shadow:0 12px 24px -24px color-mix(in srgb,black 28%,transparent 72%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__agenda-header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-3);flex-wrap:wrap}.neu-calendar__agenda-title{margin:0;font-size:var(--neu-text-base);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__agenda-count{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700}.neu-calendar__agenda-list{display:grid;gap:8px}.neu-calendar__agenda-event{min-height:48px}.neu-calendar__agenda-empty{margin:0;color:var(--neu-text-muted);font-size:var(--neu-text-sm)}.neu-calendar__week-day{min-height:220px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 84%,black 16%));display:grid;grid-template-rows:auto 1fr;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__week-head{display:grid;justify-items:center;gap:4px;width:100%;min-width:0;box-sizing:border-box;padding:12px 6px 10px;border:0;border-bottom:1px solid color-mix(in srgb,var(--neu-border) 90%,transparent 10%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 78%,transparent 22%),transparent);border-radius:18px 18px 0 0;cursor:pointer}.neu-calendar__week-date{font-size:var(--neu-text-xs);color:var(--neu-text-muted);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.neu-calendar__week-events{scrollbar-width:none}.neu-calendar__week-events::-webkit-scrollbar{display:none}.neu-calendar__week-events{padding:12px;display:grid;align-content:start;gap:var(--neu-space-2);overflow:hidden;min-height:0;min-width:0}.neu-calendar__empty{margin:0;font-size:var(--neu-text-sm);color:var(--neu-text-muted);line-height:1.35}@media(max-width:860px){.neu-calendar{padding:var(--neu-space-3)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:760px}.neu-calendar__week-head{padding:10px 3px 8px}.neu-calendar__week-head .neu-calendar__day-number{width:28px;height:28px}.neu-calendar__week-date{font-size:11px}}\n"] }]
|
|
552
552
|
}], ctorParameters: () => [], propDecorators: { events: [{ type: i0.Input, args: [{ isSignal: true, alias: "events", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }], selectedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedDate", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], maxVisibleEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleEvents", required: false }] }], showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], selectedDateChange: [{ type: i0.Output, args: ["selectedDateChange"] }], dateSelect: [{ type: i0.Output, args: ["dateSelect"] }], eventClick: [{ type: i0.Output, args: ["eventClick"] }] } });
|
|
553
553
|
|
|
554
554
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-calendar.mjs","sources":["../../../../projects/ui-core/calendar/neu-calendar.component.ts","../../../../projects/ui-core/calendar/neural-ui-core-calendar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\n\nexport type NeuCalendarView = 'month' | 'week';\nexport type NeuCalendarEventVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface NeuCalendarEvent {\n id: string;\n title: string;\n start: string | Date;\n end?: string | Date;\n description?: string;\n meta?: string;\n allDay?: boolean;\n variant?: NeuCalendarEventVariant;\n}\n\nexport interface NeuCalendarLabels {\n previousButtonAriaLabel: string;\n nextButtonAriaLabel: string;\n todayButton: string;\n allDay: string;\n noEvents: string;\n eventCount: (count: number) => string;\n moreEvents: (count: number) => string;\n}\n\nexport type NeuCalendarLabelOverrides = Partial<NeuCalendarLabels>;\n\ninterface NormalizedCalendarEvent extends Omit<NeuCalendarEvent, 'start' | 'end'> {\n start: Date;\n end?: Date;\n}\n\ninterface CalendarDayCell {\n date: Date;\n inCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n events: NormalizedCalendarEvent[];\n}\n\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction addDays(date: Date, amount: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + amount);\n return next;\n}\n\nfunction addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, date.getDate());\n}\n\nfunction startOfWeek(date: Date): Date {\n const normalized = startOfDay(date);\n const day = normalized.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n return addDays(normalized, diff);\n}\n\nconst EN_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Previous',\n nextButtonAriaLabel: 'Next',\n todayButton: 'Today',\n allDay: 'All day',\n noEvents: 'No events',\n eventCount: (count) => `${count} ${count === 1 ? 'event' : 'events'}`,\n moreEvents: (count) => `+${count} more`,\n};\n\nconst ES_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Anterior',\n nextButtonAriaLabel: 'Siguiente',\n todayButton: 'Hoy',\n allDay: 'Todo el dia',\n noEvents: 'Sin eventos',\n eventCount: (count) => `${count} evento${count === 1 ? '' : 's'}`,\n moreEvents: (count) => `+${count} mas`,\n};\n\nfunction defaultCalendarLocale(): string {\n return typeof navigator !== 'undefined' && navigator.language ? navigator.language : 'en-US';\n}\n\nfunction defaultCalendarLabels(locale: string): NeuCalendarLabels {\n return locale.toLowerCase().startsWith('es') ? ES_CALENDAR_LABELS : EN_CALENDAR_LABELS;\n}\n\n@Component({\n selector: 'neu-calendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-calendar\"\n [class.neu-calendar--month]=\"view() === 'month'\"\n [class.neu-calendar--week]=\"view() === 'week'\"\n >\n @if (showHeader()) {\n <header class=\"neu-calendar__header\">\n <div>\n <h3 class=\"neu-calendar__title\">{{ currentLabel() }}</h3>\n </div>\n\n <div class=\"neu-calendar__nav\">\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().previousButtonAriaLabel\"\n (click)=\"prev()\"\n >\n ‹\n </button>\n <button type=\"button\" class=\"neu-calendar__today\" (click)=\"today()\">\n {{ resolvedLabels().todayButton }}\n </button>\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().nextButtonAriaLabel\"\n (click)=\"next()\"\n >\n ›\n </button>\n </div>\n </header>\n }\n\n <div class=\"neu-calendar__viewport\">\n <div class=\"neu-calendar__weekdays\">\n @for (weekday of weekdays(); track $index) {\n <div class=\"neu-calendar__weekday\">{{ weekday }}</div>\n }\n </div>\n\n @if (view() === 'month') {\n <div class=\"neu-calendar__month-grid\">\n @for (day of monthDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--outside]=\"!day.inCurrentMonth\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <div class=\"neu-calendar__day-top\">\n <button\n type=\"button\"\n class=\"neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n @if (day.events.length > 0) {\n <span class=\"neu-calendar__day-count\">{{ day.events.length }}</span>\n }\n </button>\n </div>\n <div class=\"neu-calendar__event-list\">\n @for (event of monthVisibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event neu-calendar__event--compact\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--compact neu-calendar__event--' +\n (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n </article>\n }\n </div>\n } @else {\n <div class=\"neu-calendar__week-grid\">\n @for (day of weekDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__week-day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <button\n type=\"button\"\n class=\"neu-calendar__week-head neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n <span class=\"neu-calendar__week-date\">{{ formatWeekDate(day.date) }}</span>\n </button>\n\n <div class=\"neu-calendar__week-events\">\n @if (day.events.length === 0) {\n <p class=\"neu-calendar__empty\">{{ resolvedLabels().noEvents }}</p>\n }\n\n @for (event of visibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--' + (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n\n @if (day.events.length > maxVisibleEvents()) {\n <span class=\"neu-calendar__more\">{{\n resolvedLabels().moreEvents(day.events.length - maxVisibleEvents())\n }}</span>\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <section class=\"neu-calendar__agenda\" aria-live=\"polite\">\n <div class=\"neu-calendar__agenda-header\">\n <h4 class=\"neu-calendar__agenda-title\">{{ selectedAgendaLabel() }}</h4>\n <span class=\"neu-calendar__agenda-count\">{{\n resolvedLabels().eventCount(selectedDayEvents().length)\n }}</span>\n </div>\n\n @if (selectedDayEvents().length === 0) {\n <p class=\"neu-calendar__agenda-empty\">{{ resolvedLabels().noEvents }}</p>\n } @else {\n <div class=\"neu-calendar__agenda-list\">\n @for (event of selectedDayEvents(); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__agenda-event neu-calendar__event neu-calendar__event--{{\n event.variant || 'default'\n }}\"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n }\n </section>\n </div>\n `,\n styleUrl: './neu-calendar.component.scss',\n})\nexport class NeuCalendarComponent {\n readonly events = input<NeuCalendarEvent[]>([]);\n readonly view = input<NeuCalendarView>('month');\n readonly selectedDate = input<Date | string>(new Date());\n readonly locale = input<string>(defaultCalendarLocale());\n readonly maxVisibleEvents = input<number>(3);\n readonly showHeader = input<boolean>(true);\n readonly labels = input<NeuCalendarLabelOverrides>({});\n\n readonly selectedDateChange = output<Date>();\n readonly dateSelect = output<Date>();\n readonly eventClick = output<NeuCalendarEvent>();\n\n private readonly _selectedDate = signal(startOfDay(new Date()));\n\n readonly resolvedLabels = computed<NeuCalendarLabels>(() => ({\n ...defaultCalendarLabels(this.locale()),\n ...this.labels(),\n }));\n\n readonly normalizedEvents = computed<NormalizedCalendarEvent[]>(() =>\n this.events()\n .map((event) => ({\n ...event,\n start: this.coerceDate(event.start),\n end: event.end ? this.coerceDate(event.end) : undefined,\n }))\n .sort((a, b) => a.start.getTime() - b.start.getTime()),\n );\n\n readonly weekdays = computed(() => {\n const base = startOfWeek(new Date(2026, 0, 5));\n return Array.from({ length: 7 }, (_, index) =>\n new Intl.DateTimeFormat(this.locale(), { weekday: 'short' }).format(addDays(base, index)),\n );\n });\n\n readonly monthDays = computed<CalendarDayCell[]>(() => {\n const selected = this._selectedDate();\n const firstDayOfMonth = new Date(selected.getFullYear(), selected.getMonth(), 1);\n const gridStart = startOfWeek(firstDayOfMonth);\n return Array.from({ length: 42 }, (_, index) => {\n const date = addDays(gridStart, index);\n return this.buildDayCell(date, date.getMonth() === selected.getMonth());\n });\n });\n\n readonly weekDays = computed<CalendarDayCell[]>(() => {\n const start = startOfWeek(this._selectedDate());\n return Array.from({ length: 7 }, (_, index) => this.buildDayCell(addDays(start, index), true));\n });\n\n readonly selectedDay = computed<CalendarDayCell>(() =>\n this.buildDayCell(this._selectedDate(), true),\n );\n\n readonly selectedDayEvents = computed<NormalizedCalendarEvent[]>(() => this.selectedDay().events);\n\n readonly selectedAgendaLabel = computed(() =>\n new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(this._selectedDate()),\n );\n\n readonly currentLabel = computed(() => {\n const selected = this._selectedDate();\n if (this.view() === 'month') {\n return new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(\n selected,\n );\n }\n\n const weekStart = startOfWeek(selected);\n const weekEnd = addDays(weekStart, 6);\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' });\n return `${formatter.format(weekStart)} - ${formatter.format(weekEnd)}`;\n });\n\n constructor() {\n effect(() => {\n this._selectedDate.set(this.coerceDate(this.selectedDate()));\n });\n }\n\n prev(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), -1)\n : addDays(this._selectedDate(), -7),\n );\n }\n\n next(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), 1)\n : addDays(this._selectedDate(), 7),\n );\n }\n\n today(): void {\n this.selectDate(new Date());\n }\n\n selectDate(date: Date): void {\n const nextDate = startOfDay(date);\n this._selectedDate.set(nextDate);\n this.selectedDateChange.emit(nextDate);\n this.dateSelect.emit(nextDate);\n }\n\n visibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.maxVisibleEvents());\n }\n\n monthVisibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.monthVisibleEventLimit(events.length));\n }\n\n formatEventMeta(event: NormalizedCalendarEvent): string {\n if (event.meta) return event.meta;\n if (event.allDay) return this.resolvedLabels().allDay;\n return new Intl.DateTimeFormat(this.locale(), {\n hour: '2-digit',\n minute: '2-digit',\n }).format(event.start);\n }\n\n eventTooltip(event: NormalizedCalendarEvent): string {\n const meta = this.formatEventMeta(event);\n return meta ? `${event.title} · ${meta}` : event.title;\n }\n\n formatWeekDate(date: Date): string {\n return new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' }).format(date);\n }\n\n formatDayAriaLabel(day: CalendarDayCell): string {\n const dateLabel = new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(day.date);\n const eventLabel = this.resolvedLabels().eventCount(day.events.length);\n return `${dateLabel}, ${eventLabel}`;\n }\n\n onDaySpace(event: Event, date: Date): void {\n event.preventDefault();\n this.selectDate(date);\n }\n\n onDayKeydown(event: KeyboardEvent, date: Date): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectDate(date);\n return;\n }\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n this.onDaySpace(event, date);\n }\n }\n\n onEventClick(event: MouseEvent, calendarEvent: NormalizedCalendarEvent): void {\n event.stopPropagation();\n this.eventClick.emit({\n ...calendarEvent,\n start: new Date(calendarEvent.start),\n end: calendarEvent.end ? new Date(calendarEvent.end) : undefined,\n });\n }\n\n private buildDayCell(date: Date, inCurrentMonth: boolean): CalendarDayCell {\n const normalizedDate = startOfDay(date);\n const today = startOfDay(new Date());\n return {\n date: normalizedDate,\n inCurrentMonth,\n isToday: sameDay(normalizedDate, today),\n isSelected: sameDay(normalizedDate, this._selectedDate()),\n events: this.normalizedEvents().filter((event) => sameDay(event.start, normalizedDate)),\n };\n }\n\n private monthVisibleEventLimit(eventCount: number): number {\n const limit = this.maxVisibleEvents();\n if (eventCount <= limit || limit <= 1) {\n return limit;\n }\n\n return limit - 1;\n }\n\n private coerceDate(value: Date | string): Date {\n const candidate = value instanceof Date ? value : new Date(value);\n return Number.isNaN(candidate.getTime()) ? startOfDay(new Date()) : startOfDay(candidate);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"neural-ui-core-calendar.mjs","sources":["../../../../projects/ui-core/calendar/neu-calendar.component.ts","../../../../projects/ui-core/calendar/neural-ui-core-calendar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\n\nexport type NeuCalendarView = 'month' | 'week';\nexport type NeuCalendarEventVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface NeuCalendarEvent {\n id: string;\n title: string;\n start: string | Date;\n end?: string | Date;\n description?: string;\n meta?: string;\n allDay?: boolean;\n variant?: NeuCalendarEventVariant;\n}\n\nexport interface NeuCalendarLabels {\n previousButtonAriaLabel: string;\n nextButtonAriaLabel: string;\n todayButton: string;\n allDay: string;\n noEvents: string;\n eventCount: (count: number) => string;\n moreEvents: (count: number) => string;\n}\n\nexport type NeuCalendarLabelOverrides = Partial<NeuCalendarLabels>;\n\ninterface NormalizedCalendarEvent extends Omit<NeuCalendarEvent, 'start' | 'end'> {\n start: Date;\n end?: Date;\n}\n\ninterface CalendarDayCell {\n date: Date;\n inCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n events: NormalizedCalendarEvent[];\n}\n\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction addDays(date: Date, amount: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + amount);\n return next;\n}\n\nfunction addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, date.getDate());\n}\n\nfunction startOfWeek(date: Date): Date {\n const normalized = startOfDay(date);\n const day = normalized.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n return addDays(normalized, diff);\n}\n\nconst EN_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Previous',\n nextButtonAriaLabel: 'Next',\n todayButton: 'Today',\n allDay: 'All day',\n noEvents: 'No events',\n eventCount: (count) => `${count} ${count === 1 ? 'event' : 'events'}`,\n moreEvents: (count) => `+${count} more`,\n};\n\nconst ES_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Anterior',\n nextButtonAriaLabel: 'Siguiente',\n todayButton: 'Hoy',\n allDay: 'Todo el dia',\n noEvents: 'Sin eventos',\n eventCount: (count) => `${count} evento${count === 1 ? '' : 's'}`,\n moreEvents: (count) => `+${count} mas`,\n};\n\nfunction defaultCalendarLocale(): string {\n return typeof navigator !== 'undefined' && navigator.language ? navigator.language : 'en-US';\n}\n\nfunction defaultCalendarLabels(locale: string): NeuCalendarLabels {\n return locale.toLowerCase().startsWith('es') ? ES_CALENDAR_LABELS : EN_CALENDAR_LABELS;\n}\n\n@Component({\n selector: 'neu-calendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-calendar\"\n [class.neu-calendar--month]=\"view() === 'month'\"\n [class.neu-calendar--week]=\"view() === 'week'\"\n >\n @if (showHeader()) {\n <header class=\"neu-calendar__header\">\n <div>\n <h3 class=\"neu-calendar__title\">{{ currentLabel() }}</h3>\n </div>\n\n <div class=\"neu-calendar__nav\">\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().previousButtonAriaLabel\"\n (click)=\"prev()\"\n >\n ‹\n </button>\n <button type=\"button\" class=\"neu-calendar__today\" (click)=\"today()\">\n {{ resolvedLabels().todayButton }}\n </button>\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().nextButtonAriaLabel\"\n (click)=\"next()\"\n >\n ›\n </button>\n </div>\n </header>\n }\n\n <div class=\"neu-calendar__viewport\">\n <div class=\"neu-calendar__weekdays\">\n @for (weekday of weekdays(); track $index) {\n <div class=\"neu-calendar__weekday\">{{ weekday }}</div>\n }\n </div>\n\n @if (view() === 'month') {\n <div class=\"neu-calendar__month-grid\">\n @for (day of monthDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--outside]=\"!day.inCurrentMonth\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <div class=\"neu-calendar__day-top\">\n <button\n type=\"button\"\n class=\"neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n @if (day.events.length > 0) {\n <span class=\"neu-calendar__day-count\">{{ day.events.length }}</span>\n }\n </button>\n </div>\n <div class=\"neu-calendar__event-list\">\n @for (event of monthVisibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event neu-calendar__event--compact\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--compact neu-calendar__event--' +\n (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n </article>\n }\n </div>\n } @else {\n <div class=\"neu-calendar__week-grid\">\n @for (day of weekDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__week-day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <button\n type=\"button\"\n class=\"neu-calendar__week-head neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n <span class=\"neu-calendar__week-date\">{{ formatWeekDate(day.date) }}</span>\n </button>\n\n <div class=\"neu-calendar__week-events\">\n @if (day.events.length === 0) {\n <p class=\"neu-calendar__empty\">{{ resolvedLabels().noEvents }}</p>\n }\n\n @for (event of visibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--' + (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n\n @if (day.events.length > maxVisibleEvents()) {\n <span class=\"neu-calendar__more\">{{\n resolvedLabels().moreEvents(day.events.length - maxVisibleEvents())\n }}</span>\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <section class=\"neu-calendar__agenda\" aria-live=\"polite\">\n <div class=\"neu-calendar__agenda-header\">\n <h4 class=\"neu-calendar__agenda-title\">{{ selectedAgendaLabel() }}</h4>\n <span class=\"neu-calendar__agenda-count\">{{\n resolvedLabels().eventCount(selectedDayEvents().length)\n }}</span>\n </div>\n\n @if (selectedDayEvents().length === 0) {\n <p class=\"neu-calendar__agenda-empty\">{{ resolvedLabels().noEvents }}</p>\n } @else {\n <div class=\"neu-calendar__agenda-list\">\n @for (event of selectedDayEvents(); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__agenda-event neu-calendar__event neu-calendar__event--{{\n event.variant || 'default'\n }}\"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n }\n </section>\n </div>\n `,\n styleUrl: './neu-calendar.component.scss',\n})\nexport class NeuCalendarComponent {\n readonly events = input<NeuCalendarEvent[]>([]);\n readonly view = input<NeuCalendarView>('month');\n readonly selectedDate = input<Date | string>(new Date());\n readonly locale = input<string>(defaultCalendarLocale());\n readonly maxVisibleEvents = input<number>(3);\n readonly showHeader = input<boolean>(true);\n readonly labels = input<NeuCalendarLabelOverrides>({});\n\n readonly selectedDateChange = output<Date>();\n readonly dateSelect = output<Date>();\n readonly eventClick = output<NeuCalendarEvent>();\n\n private readonly _selectedDate = signal(startOfDay(new Date()));\n\n readonly resolvedLabels = computed<NeuCalendarLabels>(() => ({\n ...defaultCalendarLabels(this.locale()),\n ...this.labels(),\n }));\n\n readonly normalizedEvents = computed<NormalizedCalendarEvent[]>(() =>\n this.events()\n .map((event) => ({\n ...event,\n start: this.coerceDate(event.start),\n end: event.end ? this.coerceDate(event.end) : undefined,\n }))\n .sort((a, b) => a.start.getTime() - b.start.getTime()),\n );\n\n readonly weekdays = computed(() => {\n const base = startOfWeek(new Date(2026, 0, 5));\n return Array.from({ length: 7 }, (_, index) =>\n new Intl.DateTimeFormat(this.locale(), { weekday: 'short' }).format(addDays(base, index)),\n );\n });\n\n readonly monthDays = computed<CalendarDayCell[]>(() => {\n const selected = this._selectedDate();\n const firstDayOfMonth = new Date(selected.getFullYear(), selected.getMonth(), 1);\n const gridStart = startOfWeek(firstDayOfMonth);\n return Array.from({ length: 42 }, (_, index) => {\n const date = addDays(gridStart, index);\n return this.buildDayCell(date, date.getMonth() === selected.getMonth());\n });\n });\n\n readonly weekDays = computed<CalendarDayCell[]>(() => {\n const start = startOfWeek(this._selectedDate());\n return Array.from({ length: 7 }, (_, index) => this.buildDayCell(addDays(start, index), true));\n });\n\n readonly selectedDay = computed<CalendarDayCell>(() =>\n this.buildDayCell(this._selectedDate(), true),\n );\n\n readonly selectedDayEvents = computed<NormalizedCalendarEvent[]>(() => this.selectedDay().events);\n\n readonly selectedAgendaLabel = computed(() =>\n new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(this._selectedDate()),\n );\n\n readonly currentLabel = computed(() => {\n const selected = this._selectedDate();\n if (this.view() === 'month') {\n return new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(\n selected,\n );\n }\n\n const weekStart = startOfWeek(selected);\n const weekEnd = addDays(weekStart, 6);\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' });\n return `${formatter.format(weekStart)} - ${formatter.format(weekEnd)}`;\n });\n\n constructor() {\n effect(() => {\n this._selectedDate.set(this.coerceDate(this.selectedDate()));\n });\n }\n\n prev(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), -1)\n : addDays(this._selectedDate(), -7),\n );\n }\n\n next(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), 1)\n : addDays(this._selectedDate(), 7),\n );\n }\n\n today(): void {\n this.selectDate(new Date());\n }\n\n selectDate(date: Date): void {\n const nextDate = startOfDay(date);\n this._selectedDate.set(nextDate);\n this.selectedDateChange.emit(nextDate);\n this.dateSelect.emit(nextDate);\n }\n\n visibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.maxVisibleEvents());\n }\n\n monthVisibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.monthVisibleEventLimit(events.length));\n }\n\n formatEventMeta(event: NormalizedCalendarEvent): string {\n if (event.meta) return event.meta;\n if (event.allDay) return this.resolvedLabels().allDay;\n return new Intl.DateTimeFormat(this.locale(), {\n hour: '2-digit',\n minute: '2-digit',\n }).format(event.start);\n }\n\n eventTooltip(event: NormalizedCalendarEvent): string {\n const meta = this.formatEventMeta(event);\n return meta ? `${event.title} · ${meta}` : event.title;\n }\n\n formatWeekDate(date: Date): string {\n return new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' }).format(date);\n }\n\n formatDayAriaLabel(day: CalendarDayCell): string {\n const dateLabel = new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(day.date);\n const eventLabel = this.resolvedLabels().eventCount(day.events.length);\n return `${dateLabel}, ${eventLabel}`;\n }\n\n onDaySpace(event: Event, date: Date): void {\n event.preventDefault();\n this.selectDate(date);\n }\n\n onDayKeydown(event: KeyboardEvent, date: Date): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectDate(date);\n return;\n }\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n this.onDaySpace(event, date);\n }\n }\n\n onEventClick(event: MouseEvent, calendarEvent: NormalizedCalendarEvent): void {\n event.stopPropagation();\n this.eventClick.emit({\n ...calendarEvent,\n start: new Date(calendarEvent.start),\n end: calendarEvent.end ? new Date(calendarEvent.end) : undefined,\n });\n }\n\n private buildDayCell(date: Date, inCurrentMonth: boolean): CalendarDayCell {\n const normalizedDate = startOfDay(date);\n const today = startOfDay(new Date());\n return {\n date: normalizedDate,\n inCurrentMonth,\n isToday: sameDay(normalizedDate, today),\n isSelected: sameDay(normalizedDate, this._selectedDate()),\n events: this.normalizedEvents().filter((event) => sameDay(event.start, normalizedDate)),\n };\n }\n\n private monthVisibleEventLimit(eventCount: number): number {\n const limit = this.maxVisibleEvents();\n if (eventCount <= limit || limit <= 1) {\n return limit;\n }\n\n return limit - 1;\n }\n\n private coerceDate(value: Date | string): Date {\n const candidate = value instanceof Date ? value : new Date(value);\n return Number.isNaN(candidate.getTime()) ? startOfDay(new Date()) : startOfDay(candidate);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, signal, computed, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
2
|
+
import { input, output, signal, computed, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
|
|
5
5
|
let _neuCheckboxIdSeq = 0;
|
|
@@ -15,16 +15,22 @@ class NeuCheckboxComponent {
|
|
|
15
15
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
16
16
|
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17
17
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
18
|
+
checked = input(undefined, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
19
|
+
indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
20
|
+
ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
21
|
+
checkedChange = output();
|
|
18
22
|
_id = `neu-checkbox-${_neuCheckboxIdSeq++}`;
|
|
19
23
|
_checked = signal(false, ...(ngDevMode ? [{ debugName: "_checked" }] : /* istanbul ignore next */ []));
|
|
20
24
|
/** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */
|
|
21
25
|
_cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
22
26
|
_isDisabled = computed(() => this.disabled() || this._cvaDisabled(), ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
|
|
27
|
+
_resolvedChecked = computed(() => this.checked() ?? this._checked(), ...(ngDevMode ? [{ debugName: "_resolvedChecked" }] : /* istanbul ignore next */ []));
|
|
23
28
|
_onChange = () => { };
|
|
24
29
|
_onTouched = () => { };
|
|
25
30
|
onChange(event) {
|
|
26
31
|
const checked = event.target.checked;
|
|
27
32
|
this._checked.set(checked);
|
|
33
|
+
this.checkedChange.emit(checked);
|
|
28
34
|
this._onChange(checked);
|
|
29
35
|
}
|
|
30
36
|
onBlur() {
|
|
@@ -43,7 +49,7 @@ class NeuCheckboxComponent {
|
|
|
43
49
|
this._cvaDisabled.set(isDisabled);
|
|
44
50
|
}
|
|
45
51
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuCheckboxComponent, isStandalone: true, selector: "neu-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "neu-checkbox-host" }, providers: [
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuCheckboxComponent, isStandalone: true, selector: "neu-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, host: { classAttribute: "neu-checkbox-host" }, providers: [
|
|
47
53
|
{
|
|
48
54
|
provide: NG_VALUE_ACCESSOR,
|
|
49
55
|
useExisting: forwardRef(() => NeuCheckboxComponent),
|
|
@@ -56,34 +62,46 @@ class NeuCheckboxComponent {
|
|
|
56
62
|
class="neu-checkbox__input"
|
|
57
63
|
[id]="_id"
|
|
58
64
|
[attr.name]="name() || null"
|
|
59
|
-
[
|
|
65
|
+
[attr.aria-label]="ariaLabel() || null"
|
|
66
|
+
[attr.aria-checked]="indeterminate() ? 'mixed' : _resolvedChecked()"
|
|
67
|
+
[checked]="_resolvedChecked()"
|
|
68
|
+
[indeterminate]="indeterminate()"
|
|
60
69
|
[disabled]="_isDisabled()"
|
|
61
70
|
(change)="onChange($event)"
|
|
62
71
|
(blur)="onBlur()"
|
|
63
72
|
/>
|
|
64
|
-
<span
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
<span
|
|
74
|
+
class="neu-checkbox__box"
|
|
75
|
+
[class.neu-checkbox__box--checked]="_resolvedChecked()"
|
|
76
|
+
[class.neu-checkbox__box--mixed]="indeterminate()"
|
|
77
|
+
>
|
|
78
|
+
<svg class="neu-checkbox__check" viewBox="0 0 12 10" fill="none" aria-hidden="true">
|
|
79
|
+
@if (indeterminate()) {
|
|
80
|
+
<path
|
|
81
|
+
class="neu-checkbox__check-mark neu-checkbox__check-mark--visible"
|
|
82
|
+
d="M2 5H10"
|
|
83
|
+
stroke="white"
|
|
84
|
+
stroke-width="1.8"
|
|
85
|
+
stroke-linecap="round"
|
|
86
|
+
/>
|
|
87
|
+
} @else {
|
|
88
|
+
<path
|
|
89
|
+
class="neu-checkbox__check-mark"
|
|
90
|
+
[class.neu-checkbox__check-mark--visible]="_resolvedChecked()"
|
|
91
|
+
d="M1 5L4.5 8.5L11 1"
|
|
92
|
+
stroke="white"
|
|
93
|
+
stroke-width="1.8"
|
|
94
|
+
stroke-linecap="round"
|
|
95
|
+
stroke-linejoin="round"
|
|
96
|
+
/>
|
|
97
|
+
}
|
|
80
98
|
</svg>
|
|
81
99
|
</span>
|
|
82
100
|
@if (label()) {
|
|
83
101
|
<span class="neu-checkbox__label">{{ label() }}</span>
|
|
84
102
|
}
|
|
85
103
|
</label>
|
|
86
|
-
`, isInline: true, styles: [".neu-checkbox-host{display:inline-block}.neu-checkbox{display:inline-flex;align-items:center;gap:var(--neu-space-3);cursor:pointer;-webkit-user-select:none;user-select:none}.neu-checkbox--disabled{opacity:.5;pointer-events:none}.neu-checkbox__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.neu-checkbox__input:focus-visible+.neu-checkbox__box{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-checkbox__box{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;background:var(--neu-surface);border:1.5px solid var(--neu-border-hover);border-radius:var(--neu-radius-sm);transition:background-color var(--neu-transition),border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-checkbox__box--checked{background:var(--neu-primary);border-color:var(--neu-primary);box-shadow:var(--neu-focus-ring-strong)}.neu-checkbox__check{width:12px;height:10px
|
|
104
|
+
`, isInline: true, styles: [".neu-checkbox-host{display:inline-block}.neu-checkbox{display:inline-flex;align-items:center;gap:var(--neu-space-3);cursor:pointer;-webkit-user-select:none;user-select:none}.neu-checkbox--disabled{opacity:.5;pointer-events:none}.neu-checkbox__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.neu-checkbox__input:focus-visible+.neu-checkbox__box{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-checkbox__box{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;background:var(--neu-surface);border:1.5px solid var(--neu-border-hover);border-radius:var(--neu-radius-sm);transition:background-color var(--neu-transition),border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-checkbox__box--checked,.neu-checkbox__box--mixed{background:var(--neu-primary);border-color:var(--neu-primary);box-shadow:var(--neu-focus-ring-strong)}.neu-checkbox__check{width:12px;height:10px}.neu-checkbox__check-mark{opacity:0;transform:scale(.6);transition:opacity .15s ease,transform .15s ease}.neu-checkbox__check-mark--visible{opacity:1;transform:scale(1)}.neu-checkbox__label{font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);font-weight:500;line-height:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
87
105
|
}
|
|
88
106
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCheckboxComponent, decorators: [{
|
|
89
107
|
type: Component,
|
|
@@ -100,35 +118,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
100
118
|
class="neu-checkbox__input"
|
|
101
119
|
[id]="_id"
|
|
102
120
|
[attr.name]="name() || null"
|
|
103
|
-
[
|
|
121
|
+
[attr.aria-label]="ariaLabel() || null"
|
|
122
|
+
[attr.aria-checked]="indeterminate() ? 'mixed' : _resolvedChecked()"
|
|
123
|
+
[checked]="_resolvedChecked()"
|
|
124
|
+
[indeterminate]="indeterminate()"
|
|
104
125
|
[disabled]="_isDisabled()"
|
|
105
126
|
(change)="onChange($event)"
|
|
106
127
|
(blur)="onBlur()"
|
|
107
128
|
/>
|
|
108
|
-
<span
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
<span
|
|
130
|
+
class="neu-checkbox__box"
|
|
131
|
+
[class.neu-checkbox__box--checked]="_resolvedChecked()"
|
|
132
|
+
[class.neu-checkbox__box--mixed]="indeterminate()"
|
|
133
|
+
>
|
|
134
|
+
<svg class="neu-checkbox__check" viewBox="0 0 12 10" fill="none" aria-hidden="true">
|
|
135
|
+
@if (indeterminate()) {
|
|
136
|
+
<path
|
|
137
|
+
class="neu-checkbox__check-mark neu-checkbox__check-mark--visible"
|
|
138
|
+
d="M2 5H10"
|
|
139
|
+
stroke="white"
|
|
140
|
+
stroke-width="1.8"
|
|
141
|
+
stroke-linecap="round"
|
|
142
|
+
/>
|
|
143
|
+
} @else {
|
|
144
|
+
<path
|
|
145
|
+
class="neu-checkbox__check-mark"
|
|
146
|
+
[class.neu-checkbox__check-mark--visible]="_resolvedChecked()"
|
|
147
|
+
d="M1 5L4.5 8.5L11 1"
|
|
148
|
+
stroke="white"
|
|
149
|
+
stroke-width="1.8"
|
|
150
|
+
stroke-linecap="round"
|
|
151
|
+
stroke-linejoin="round"
|
|
152
|
+
/>
|
|
153
|
+
}
|
|
124
154
|
</svg>
|
|
125
155
|
</span>
|
|
126
156
|
@if (label()) {
|
|
127
157
|
<span class="neu-checkbox__label">{{ label() }}</span>
|
|
128
158
|
}
|
|
129
159
|
</label>
|
|
130
|
-
`, styles: [".neu-checkbox-host{display:inline-block}.neu-checkbox{display:inline-flex;align-items:center;gap:var(--neu-space-3);cursor:pointer;-webkit-user-select:none;user-select:none}.neu-checkbox--disabled{opacity:.5;pointer-events:none}.neu-checkbox__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.neu-checkbox__input:focus-visible+.neu-checkbox__box{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-checkbox__box{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;background:var(--neu-surface);border:1.5px solid var(--neu-border-hover);border-radius:var(--neu-radius-sm);transition:background-color var(--neu-transition),border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-checkbox__box--checked{background:var(--neu-primary);border-color:var(--neu-primary);box-shadow:var(--neu-focus-ring-strong)}.neu-checkbox__check{width:12px;height:10px
|
|
131
|
-
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
160
|
+
`, styles: [".neu-checkbox-host{display:inline-block}.neu-checkbox{display:inline-flex;align-items:center;gap:var(--neu-space-3);cursor:pointer;-webkit-user-select:none;user-select:none}.neu-checkbox--disabled{opacity:.5;pointer-events:none}.neu-checkbox__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.neu-checkbox__input:focus-visible+.neu-checkbox__box{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-checkbox__box{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;background:var(--neu-surface);border:1.5px solid var(--neu-border-hover);border-radius:var(--neu-radius-sm);transition:background-color var(--neu-transition),border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-checkbox__box--checked,.neu-checkbox__box--mixed{background:var(--neu-primary);border-color:var(--neu-primary);box-shadow:var(--neu-focus-ring-strong)}.neu-checkbox__check{width:12px;height:10px}.neu-checkbox__check-mark{opacity:0;transform:scale(.6);transition:opacity .15s ease,transform .15s ease}.neu-checkbox__check-mark--visible{opacity:1;transform:scale(1)}.neu-checkbox__label{font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);font-weight:500;line-height:1}\n"] }]
|
|
161
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }] } });
|
|
132
162
|
|
|
133
163
|
/**
|
|
134
164
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-checkbox.mjs","sources":["../../../../projects/ui-core/checkbox/neu-checkbox.component.ts","../../../../projects/ui-core/checkbox/neural-ui-core-checkbox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuCheckboxIdSeq = 0;\n\n/**\n * NeuralUI Checkbox Component\n *\n * Checkbox personalizado y accesible para Angular Forms.\n *\n * Uso:\n * <neu-checkbox label=\"Acepto los términos\" [formControl]=\"termsCtrl\" />\n */\n@Component({\n selector: 'neu-checkbox',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-checkbox-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"neu-checkbox\" [class.neu-checkbox--disabled]=\"_isDisabled()\" [for]=\"_id\">\n <input\n type=\"checkbox\"\n class=\"neu-checkbox__input\"\n [id]=\"_id\"\n [attr.name]=\"name() || null\"\n [checked]=\"
|
|
1
|
+
{"version":3,"file":"neural-ui-core-checkbox.mjs","sources":["../../../../projects/ui-core/checkbox/neu-checkbox.component.ts","../../../../projects/ui-core/checkbox/neural-ui-core-checkbox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuCheckboxIdSeq = 0;\n\n/**\n * NeuralUI Checkbox Component\n *\n * Checkbox personalizado y accesible para Angular Forms.\n *\n * Uso:\n * <neu-checkbox label=\"Acepto los términos\" [formControl]=\"termsCtrl\" />\n */\n@Component({\n selector: 'neu-checkbox',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-checkbox-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"neu-checkbox\" [class.neu-checkbox--disabled]=\"_isDisabled()\" [for]=\"_id\">\n <input\n type=\"checkbox\"\n class=\"neu-checkbox__input\"\n [id]=\"_id\"\n [attr.name]=\"name() || null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : _resolvedChecked()\"\n [checked]=\"_resolvedChecked()\"\n [indeterminate]=\"indeterminate()\"\n [disabled]=\"_isDisabled()\"\n (change)=\"onChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span\n class=\"neu-checkbox__box\"\n [class.neu-checkbox__box--checked]=\"_resolvedChecked()\"\n [class.neu-checkbox__box--mixed]=\"indeterminate()\"\n >\n <svg class=\"neu-checkbox__check\" viewBox=\"0 0 12 10\" fill=\"none\" aria-hidden=\"true\">\n @if (indeterminate()) {\n <path\n class=\"neu-checkbox__check-mark neu-checkbox__check-mark--visible\"\n d=\"M2 5H10\"\n stroke=\"white\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n />\n } @else {\n <path\n class=\"neu-checkbox__check-mark\"\n [class.neu-checkbox__check-mark--visible]=\"_resolvedChecked()\"\n d=\"M1 5L4.5 8.5L11 1\"\n stroke=\"white\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n }\n </svg>\n </span>\n @if (label()) {\n <span class=\"neu-checkbox__label\">{{ label() }}</span>\n }\n </label>\n `,\n styleUrl: './neu-checkbox.component.scss',\n})\nexport class NeuCheckboxComponent implements ControlValueAccessor {\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly disabled = input<boolean>(false);\n readonly checked = input<boolean | undefined>(undefined);\n readonly indeterminate = input<boolean>(false);\n readonly ariaLabel = input<string>('');\n\n readonly checkedChange = output<boolean>();\n\n readonly _id = `neu-checkbox-${_neuCheckboxIdSeq++}`;\n\n protected readonly _checked = signal(false);\n /** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */\n private readonly _cvaDisabled = signal(false);\n protected readonly _isDisabled = computed(() => this.disabled() || this._cvaDisabled());\n protected readonly _resolvedChecked = computed(() => this.checked() ?? this._checked());\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this.checkedChange.emit(checked);\n this._onChange(checked);\n }\n\n onBlur(): void {\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._checked.set(!!val);\n }\n\n registerOnChange(fn: (v: boolean) => 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;AAYA,IAAI,iBAAiB,GAAG,CAAC;AAEzB;;;;;;;AAOG;MA8DU,oBAAoB,CAAA;AACtB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,2EAAC;AACxB,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAChC,IAAA,OAAO,GAAG,KAAK,CAAsB,SAAS,8EAAC;AAC/C,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,oFAAC;AACrC,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,gFAAC;IAE7B,aAAa,GAAG,MAAM,EAAW;AAEjC,IAAA,GAAG,GAAG,CAAA,aAAA,EAAgB,iBAAiB,EAAE,EAAE;AAEjC,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;;AAE1B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AAC1B,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,kFAAC;AACpE,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,uFAAC;AAE/E,IAAA,SAAS,GAAyB,MAAK,EAAE,CAAC;AAC1C,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;AAEzC,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IACzB;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,GAAY,EAAA;QACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,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,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC;wGA9CW,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,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,SAAA,EAxDpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gzCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAGU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA7DhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,aAAA,EACT,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAA,SAAA,EACzB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,gzCAAA,CAAA,EAAA;;;AChFH;;AAEG;;;;"}
|
|
@@ -83,7 +83,7 @@ class NeuChipComponent {
|
|
|
83
83
|
</svg>
|
|
84
84
|
</button>
|
|
85
85
|
}
|
|
86
|
-
`, isInline: true, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text
|
|
86
|
+
`, isInline: true, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}html[data-theme=dark] .neu-chip--default{color:#f2f7fb;background:#21262d;border-color:#6e7681}html[data-theme=dark] .neu-chip--primary{color:#e8f4ff;background:#0b3b74;border-color:#65b7ff}html[data-theme=dark] .neu-chip--success{color:#d7fbe8;background:#0f5132;border-color:#55d98c}html[data-theme=dark] .neu-chip--warning{color:#fff4cc;background:#6b4e00;border-color:#facc15}html[data-theme=dark] .neu-chip--danger{color:#ffe2e2;background:#7f1d1d;border-color:#f87171}html[data-theme=dark] .neu-chip--warning.neu-chip--selected{background:#a16207;color:#fff}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
87
87
|
}
|
|
88
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuChipComponent, decorators: [{
|
|
89
89
|
type: Component,
|
|
@@ -119,7 +119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
119
119
|
</svg>
|
|
120
120
|
</button>
|
|
121
121
|
}
|
|
122
|
-
`, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text
|
|
122
|
+
`, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}html[data-theme=dark] .neu-chip--default{color:#f2f7fb;background:#21262d;border-color:#6e7681}html[data-theme=dark] .neu-chip--primary{color:#e8f4ff;background:#0b3b74;border-color:#65b7ff}html[data-theme=dark] .neu-chip--success{color:#d7fbe8;background:#0f5132;border-color:#55d98c}html[data-theme=dark] .neu-chip--warning{color:#fff4cc;background:#6b4e00;border-color:#facc15}html[data-theme=dark] .neu-chip--danger{color:#ffe2e2;background:#7f1d1d;border-color:#f87171}html[data-theme=dark] .neu-chip--warning.neu-chip--selected{background:#a16207;color:#fff}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"] }]
|
|
123
123
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], removeAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeAriaLabel", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], removed: [{ type: i0.Output, args: ["removed"] }] } });
|
|
124
124
|
|
|
125
125
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-chip.mjs","sources":["../../../../projects/ui-core/chip/neu-chip.component.ts","../../../../projects/ui-core/chip/neural-ui-core-chip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '_hostRole()',\n '[attr.aria-pressed]': '_hostAriaPressed()',\n '[attr.tabindex]': '_hostTabindex()',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color / Color variant */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño / Size */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado / Selected state */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre / Shows close button */\n removable = input<boolean>(false);\n\n /** Deshabilitado / Disabled */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar / Aria-label for the delete button */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */\n readonly _hostRole = computed(() => (this.removable() ? 'group' : 'button'));\n\n /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */\n readonly _hostAriaPressed = computed<boolean | null>(() =>\n this.removable() ? null : this.selected(),\n );\n\n /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */\n readonly _hostTabindex = computed<number | null>(() => {\n if (this.removable()) return null;\n return this.disabled() ? -1 : 0;\n });\n\n onToggle(): void {\n if (!this.disabled() && !this.removable()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"neural-ui-core-chip.mjs","sources":["../../../../projects/ui-core/chip/neu-chip.component.ts","../../../../projects/ui-core/chip/neural-ui-core-chip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '_hostRole()',\n '[attr.aria-pressed]': '_hostAriaPressed()',\n '[attr.tabindex]': '_hostTabindex()',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color / Color variant */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño / Size */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado / Selected state */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre / Shows close button */\n removable = input<boolean>(false);\n\n /** Deshabilitado / Disabled */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar / Aria-label for the delete button */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */\n readonly _hostRole = computed(() => (this.removable() ? 'group' : 'button'));\n\n /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */\n readonly _hostAriaPressed = computed<boolean | null>(() =>\n this.removable() ? null : this.selected(),\n );\n\n /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */\n readonly _hostTabindex = computed<number | null>(() => {\n if (this.removable()) return null;\n return this.disabled() ? -1 : 0;\n });\n\n onToggle(): void {\n if (!this.disabled() && !this.removable()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|