@opengis/gis 0.2.75 → 0.2.76

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/dist/index.css CHANGED
@@ -1 +1 @@
1
- th[data-v-93fedaf0]{position:sticky;top:0;background:#fff}.mapLayer-filter[data-v-cc1f0579]{display:inline-flex;position:relative}.mapLayer-filter__trigger[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer;border-radius:50%;transition:background .2s ease}.mapLayer-filter__trigger[data-v-cc1f0579]:hover:not(.mapLayer-filter__trigger--disabled){background:#d4dae033}.mapLayer-filter__trigger:hover:not(.mapLayer-filter__trigger--disabled) .mapLayer-filter__icon[data-v-cc1f0579]{color:#1d4ed8}.mapLayer-filter__trigger--disabled[data-v-cc1f0579]{cursor:not-allowed;opacity:.5;pointer-events:auto}.mapLayer-filter__icon[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;color:#475569;transition:color .2s ease}.mapLayer-filter__trigger--disabled .mapLayer-filter__icon[data-v-cc1f0579]{color:inherit}.mapLayer-filter__popover[data-v-cc1f0579]{position:absolute;max-width:min-content}.mapLayer-filter__popover--static[data-v-cc1f0579]{position:static;top:auto;left:auto;transform:none!important}.map-filter[data-v-cc1f0579]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px}.map-filter__header[data-v-cc1f0579]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.map-filter__title[data-v-cc1f0579]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-cc1f0579]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1}.map-filter__close[data-v-cc1f0579]:hover{background:#3b82f633;color:#2563eb}.filter-badge__hint[data-v-cc1f0579]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.map-filter[data-v-98772410]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:240px}.map-filter__header[data-v-98772410]{display:flex;align-items:center;justify-content:space-between}.map-filter__title[data-v-98772410]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-98772410]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer}.map-filter__close[data-v-98772410]:hover{background:#3b82f633;color:#2563eb}.card[data-v-763da13a]{font-family:inherit}.fade-enter-active[data-v-763da13a],.fade-leave-active[data-v-763da13a]{transition:opacity .2s ease}.fade-enter-from[data-v-763da13a],.fade-leave-to[data-v-763da13a]{opacity:0}.map-center-control[data-v-80ea583c]{display:flex;gap:.5rem}.map-widget__filter-host[data-v-5195b994]{position:absolute;left:10px;top:100px;align-self:stretch;pointer-events:auto;z-index:21}.mapLayer-info[data-v-cc1cc7bf]{display:inline-flex;position:relative}.mapLayer-info__trigger[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer}.mapLayer-info__icon[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transition:color .2s ease}.mapLayer-info__icon[data-v-cc1cc7bf]:hover{color:#1d4ed8}.mapLayer-info__popover[data-v-cc1cc7bf]{position:absolute;min-width:200px}.mapLayer-info__inner[data-v-cc1cc7bf]{display:flex;flex-direction:column;gap:0}.mapLayer-info__item[data-v-cc1cc7bf]{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:flex-start;padding:6px 0;border-bottom:1px solid #e2e8f0}.mapLayer-info__item[data-v-cc1cc7bf]:last-child{border-bottom:none}.mapLayer-info__item-label[data-v-cc1cc7bf]{font-size:12px;color:#475569;font-weight:600}.mapLayer-info__item-value[data-v-cc1cc7bf]{font-size:13px;color:#1f2937}.mapLayer-info__item-value--break-all[data-v-cc1cc7bf]{word-break:break-all}.map-info[data-v-813e24fb]{width:100%}.map-info__header[data-v-813e24fb]{display:flex;justify-content:space-between;align-items:flex-start;gap:30px;padding:20px 20px 12px}.map-info__actions[data-v-813e24fb]{display:flex;align-items:center;gap:8px}.map-info__title[data-v-813e24fb]{margin:0;font-size:18px;line-height:1.3;font-weight:600;color:#1f2937}.map-info__menu[data-v-813e24fb]{position:relative}.map-info__menu-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__menu-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__popover[data-v-813e24fb]{position:absolute;background:#fff;box-shadow:0 10px 40px 10px #00000014;border-radius:12px;padding:8px 12px;min-width:160px;z-index:50}.map-info__popover-link[data-v-813e24fb]{display:block;padding:6px 0;font-size:13px;color:#1f2937;text-decoration:none}.map-info__popover-link[data-v-813e24fb]:hover{color:#1d4ed8}.map-info__content[data-v-813e24fb]{padding:0 20px 20px;font-size:14px;color:#34495e;transition:max-height .3s ease,opacity .3s ease,padding .3s ease;overflow:hidden;max-height:1000px;opacity:1}.map-info__content--collapsed[data-v-813e24fb]{max-height:0;opacity:0;padding:0 20px 5px}.map-info__content[data-v-813e24fb] p{margin:0 0 12px}.map-info__toggle-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__toggle-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__toggle-icon--rotated[data-v-813e24fb]{transform:rotate(180deg)}.opacity-btn[data-v-b278347a]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.opacity-btn[data-v-b278347a]:hover{background:#94a3b829;color:#1f2937}.opacity-popover[data-v-b278347a]{position:fixed;z-index:102;padding:12px;width:260px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.opacity-popover__content[data-v-b278347a]{display:flex;align-items:center;gap:8px}.opacity-popover__label[data-v-b278347a]{font-size:12px;color:#6b7280}.opacity-popover__range[data-v-b278347a]{flex:1 1 auto;accent-color:#2563eb}.opacity-popover__value[data-v-b278347a]{font-size:12px;color:#475569}.layers-panel[data-v-cd741b3d]{display:flex;flex-direction:column;background:#fff;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:220px}.layers-panel__header[data-v-cd741b3d]{display:flex;justify-content:space-between;align-items:center;gap:16px}.layers-panel__header-actions[data-v-cd741b3d]{display:flex;align-items:center;gap:8px}.layers-panel__heading[data-v-cd741b3d]{display:flex;flex-direction:column;gap:6px}.layers-panel__title[data-v-cd741b3d]{font-size:18px;font-weight:600;color:#1f2937}.layers-panel__description[data-v-cd741b3d]{margin:0;font-size:14px;color:#34495e}.layers-panel__clear[data-v-cd741b3d]{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:10px;border:1px solid rgba(59,130,246,.6);background-color:#3b82f614;color:#1d4ed8;font-size:12px;font-weight:500;line-height:1;transition:background-color .15s ease,color .15s ease}.layers-panel__clear[data-v-cd741b3d]:hover{background-color:#2563eb26;color:#1e40af}.layers-panel__item[data-v-cd741b3d]{display:flex;align-items:center;justify-content:space-between;gap:12px}.layers-panel__label[data-v-cd741b3d]{display:flex;flex-direction:column;gap:4px;color:#334155;width:100%}.layers-panel__label-row[data-v-cd741b3d]{display:flex;align-items:center;gap:12px}.layers-panel__title-block[data-v-cd741b3d]{display:inline-flex;align-items:center;gap:8px;flex:1;min-width:0}.layers-panel__checkbox[data-v-cd741b3d]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border:2px solid #2563eb;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:#fff;transition:all .15s ease}.layers-panel__checkbox[data-v-cd741b3d]:checked{background:#2563eb;border-color:#2563eb}.layers-panel__checkbox[data-v-cd741b3d]:checked:after{content:"";width:9px;height:9px;display:block;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='9' viewBox='0 0 12 9' fill='none'%3E%3Cpath d='M10.3332 1.5L4.49984 7.33333L1.6665 4.5' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat}.layers-panel__checkbox[data-v-cd741b3d]:hover{border-color:#1d4ed8}.layers-panel__name[data-v-cd741b3d]{font-size:14px;font-weight:400;color:#1f2937;min-width:0}.layers-panel__meta[data-v-cd741b3d]{display:flex;align-items:center;gap:4px;margin-left:auto}.layers-panel__legend-dot[data-v-cd741b3d]{width:11px;height:11px;border-radius:50%;display:inline-block;flex-shrink:0}.layers-panel__legend-dot--inline[data-v-cd741b3d]{border:1px solid rgba(148,163,184,.5);box-shadow:0 0 0 1px #ffffff59}.layers-panel__actions[data-v-cd741b3d]{display:flex;align-items:center;gap:4px}.layers-panel__action[data-v-cd741b3d]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;cursor:pointer;padding:0;color:#475569}.layers-panel__action[data-v-cd741b3d]:hover{color:#1d4ed8}.layers-panel__content[data-v-cd741b3d]{display:flex;flex-direction:column;gap:10px;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1;margin-top:15px}.layers-panel__content--collapsed[data-v-cd741b3d]{margin-top:-5px;max-height:0;opacity:0;gap:0}.layers-panel__toggle-button[data-v-cd741b3d]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.layers-panel__toggle-button[data-v-cd741b3d]:hover{background:#94a3b833}.layers-panel__toggle-icon--rotated[data-v-cd741b3d]{transform:rotate(180deg);transition:transform .3s ease}.catalog-tab[data-v-f68d8bda]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.catalog-tab__search[data-v-f68d8bda]{position:sticky;top:0;background:inherit;z-index:1;padding-bottom:8px}.catalog-tab__list[data-v-f68d8bda]{flex:1 1 auto;display:flex;flex-direction:column;overflow-y:auto;min-height:0;padding-bottom:8px}.fade-enter-active[data-v-f68d8bda],.fade-leave-active[data-v-f68d8bda]{transition:all .2s ease}.fade-enter-from[data-v-f68d8bda],.fade-leave-to[data-v-f68d8bda]{opacity:0;max-height:0}.filter-badge[data-v-f68d8bda]{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:9999px;background:#94a3b826;color:#475569;font-size:11px;font-weight:600;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.filter-badge[data-v-f68d8bda]:hover{background:#94a3b840;color:#1f2937}.filter-badge--disabled[data-v-f68d8bda]{cursor:not-allowed;background:#94a3b814;color:#475569b3}.filter-badge__icon[data-v-f68d8bda]{width:14px;height:14px}.filter-badge__hint[data-v-f68d8bda]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.selected-tab[data-v-39b6f281]{display:flex;flex-direction:column;gap:12px;height:100%;min-height:0}.selected-tab__actions[data-v-39b6f281]{flex:0 0 auto}.selected-tab__add[data-v-39b6f281]{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:8px 12px;border-radius:10px;background:#3b82f614;color:#2563eb;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__add[data-v-39b6f281]:hover{background:#3b82f629;color:#1d4ed8}.selected-tab__empty[data-v-39b6f281]{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px dashed rgba(148,163,184,.6);border-radius:16px;padding:24px;background:#f8fafce6;text-align:center;color:#6b7280}.selected-tab__empty-title[data-v-39b6f281]{margin:0;font-weight:600;color:#1f2937}.selected-tab__empty-text[data-v-39b6f281]{margin:0;font-size:13px}.selected-tab__scroll[data-v-39b6f281]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px;display:flex;flex-direction:column}.selected-tab__scroll>div[data-v-39b6f281]{display:flex;flex-direction:column;gap:8px}.selected-tab__item[data-v-39b6f281]{border:1px solid #e5e7eb;border-radius:10px;padding:12px;background:#fff;color:#4b5563;font-size:13px;transition:background .2s ease,border-color .2s ease}.selected-tab__item[data-v-39b6f281]:hover{background:#f8fafccc}.selected-tab__item--dragging[data-v-39b6f281]{opacity:.5}.selected-tab__item--over[data-v-39b6f281]{border-color:#2563eb;background:#3b82f61f}.selected-tab__item-header[data-v-39b6f281]{display:flex;align-items:center;justify-content:space-between;gap:12px}.selected-tab__item-info[data-v-39b6f281]{display:flex;align-items:center;gap:8px;cursor:move;color:#1f2937}.selected-tab__item-handle[data-v-39b6f281]{color:#64748bcc;font-size:16px}.selected-tab__item-checkbox[data-v-39b6f281]{width:16px;height:16px;accent-color:#2563eb}.selected-tab__item-controls[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__item-opacity[data-v-39b6f281],.selected-tab__item-menu[data-v-39b6f281]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__item-opacity[data-v-39b6f281]:hover,.selected-tab__item-menu[data-v-39b6f281]:hover{background:#94a3b829;color:#1f2937}.selected-tab__popover[data-v-39b6f281]{position:fixed;z-index:102;padding:12px;width:240px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.selected-tab__popover-content[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__popover-label[data-v-39b6f281]{font-size:12px;color:#6b7280}.selected-tab__popover-range[data-v-39b6f281]{flex:1 1 auto;accent-color:#2563eb}.selected-tab__popover-value[data-v-39b6f281]{font-size:12px;color:#475569}.selected-tab__menu[data-v-39b6f281]{position:fixed;z-index:102;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26;padding:12px}.selected-tab__menu-inner[data-v-39b6f281]{display:flex;flex-direction:column;gap:4px;width:190px}.selected-tab__menu-item[data-v-39b6f281]{display:flex;align-items:center;gap:8px;padding:6px 8px;border:none;background:transparent;color:#1f2937;font-size:13px;text-align:left;cursor:pointer;transition:background .2s ease}.selected-tab__menu-item[data-v-39b6f281]:hover{background:#94a3b829}.selected-tab__menu-item--disabled[data-v-39b6f281]{color:#63666a99;cursor:not-allowed}.selected-tab__menu-item--danger[data-v-39b6f281]{color:#dc2626}.selected-tab__menu-item--danger[data-v-39b6f281]:hover{background:#dc26261f}.filter-tab[data-v-c6632fbd]{display:flex;flex-direction:column;gap:16px;height:100%;min-height:0}.filter-tab__header[data-v-c6632fbd]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.filter-tab__subtitle[data-v-c6632fbd]{margin:0 0 4px;font-size:12px;font-weight:500;color:#6b7280}.filter-tab__title[data-v-c6632fbd]{margin:0;font-size:16px;font-weight:600;color:#1f2937}.filter-tab__content[data-v-c6632fbd]{flex:1 1 auto;min-height:0;background:#fffffff0;border:1px solid rgba(148,163,184,.35);box-shadow:0 16px 32px #0f172a1a}.filter-tab__scroll[data-v-c6632fbd]{max-height:100%;overflow-y:auto;padding:0}.filter-tab__empty[data-v-c6632fbd]{padding:24px;text-align:center;background:#f8fafce6;border:1px dashed rgba(148,163,184,.6);border-radius:16px}.filter-tab__empty-title[data-v-c6632fbd]{margin:0 0 8px;font-size:15px;font-weight:600;color:#1f2937}.filter-tab__empty-text[data-v-c6632fbd]{margin:0;font-size:13px;color:#6b7280}.map-catalog-widget[data-v-0023ade8]{display:flex;flex-direction:column;max-height:100%;overflow:hidden}.map-catalog-widget__body[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.map-catalog-widget__scroll[data-v-0023ade8]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px}.map-catalog-widget__content[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1}.map-catalog-widget__content--collapsed[data-v-0023ade8]{max-height:0;opacity:0;padding:0}.map-catalog-widget__toggle-button[data-v-0023ade8]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-catalog-widget__toggle-button[data-v-0023ade8]:hover{background:#94a3b833}.map-catalog-widget__toggle-icon--rotated[data-v-0023ade8]{transform:rotate(180deg);transition:transform .3s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:9999px;background:#94a3b82e;color:#475569;border:none;padding:0;transition:background-color .15s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge:hover,.map-attribute__filter[data-v-9686ce7b] .filter-badge.filter-badge--active{background:#2563eb2e;color:#1d4ed8}.map-attribute__filter[data-v-9686ce7b] .filter-badge__icon{width:16px;height:16px}.map-attribute__filter[data-v-9686ce7b] .filter-badge__panel{border-radius:16px;box-shadow:0 16px 32px #0f172a14}.map-search-widget[data-v-d773179e]{width:100%}.map-print-control[data-v-4fae7635]{z-index:35;display:flex;flex-direction:column;align-items:flex-end;gap:12px}[data-v-4fae7635] .mapboxgl-export-list{display:none;min-width:280px;padding:20px 16px 16px;border-radius:16px;background:#fffffffa;box-shadow:0 18px 40px #0f172a40;color:#0f172a;font-size:14px;line-height:1.4;margin-right:40px}[data-v-4fae7635] .mapboxgl-export-list table{width:100%;border-collapse:separate;border-spacing:0 12px}[data-v-4fae7635] .mapboxgl-export-list td:first-child{width:35%;font-weight:500;color:#334155;padding-right:12px}[data-v-4fae7635] .mapboxgl-export-list label{display:inline-flex;align-items:center}[data-v-4fae7635] .mapboxgl-export-list select{width:100%;height:36px;border-radius:10px;border:1px solid rgba(15,23,42,.1);padding:0 12px;font-size:14px;color:#0f172a;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-v-4fae7635] .mapboxgl-export-list select:focus{outline:none;border-color:#0f172a40;box-shadow:0 0 0 2px #3b82f633}[data-v-4fae7635] .mapboxgl-export-list .generate-button{margin-top:12px;width:100%;height:40px;border-radius:12px;border:none;background:linear-gradient(134deg,#2563eb,#1d4ed8);color:#fff;font-weight:600;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}[data-v-4fae7635] .mapboxgl-export-list .generate-button:hover{transform:translateY(-1px);box-shadow:0 14px 28px #2563eb59}[data-v-4fae7635] .mapboxgl-export-list .generate-button:active{transform:translateY(0);box-shadow:0 10px 20px #2563eb4d}.cursor-coordinates[data-v-334315d9]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:12px;background:#ffffffeb;color:#1f2937;box-shadow:0 10px 22px #0f172a29;font-size:12px;max-width:240px}.cursor-coordinates__icon[data-v-334315d9]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:#2563eb}.cursor-coordinates__icon svg[data-v-334315d9]{width:100%;height:100%}.cursor-coordinates__text[data-v-334315d9]{white-space:nowrap;font-family:ui-monospace,SFMono-Regular,SFMono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.minimap[data-v-bc754c89]{position:relative}.minimap__button[data-v-bc754c89]{width:32px;height:32px;border-radius:50%;border:1px solid rgba(148,163,184,.35);background:#ffffffeb;color:#334155;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 6px 16px #0f172a1f;transition:all .2s ease}.minimap__button[data-v-bc754c89]:hover{border-color:#3b82f680;color:#1d4ed8}.minimap__button-icon[data-v-bc754c89]{transition:transform .2s ease}.minimap__wrapper[data-v-bc754c89]{position:absolute;bottom:2.5rem;right:2rem;border-radius:10px;overflow:hidden;border:1px solid rgba(148,163,184,.4);box-shadow:0 10px 22px #0f172a1f;background:#fff}.minimap-slide-enter-active[data-v-bc754c89],.minimap-slide-leave-active[data-v-bc754c89]{transition:opacity .2s ease,transform .2s ease}.minimap-slide-enter-from[data-v-bc754c89],.minimap-slide-leave-to[data-v-bc754c89]{opacity:0;transform:translate(12px)}.map-widget[data-v-73d647f9]{position:relative;width:100%;background:#f1f5f9;overflow:hidden}.map-widget__view[data-v-73d647f9]{font-family:inherit;width:100%;height:100%}.map-widget__state[data-v-73d647f9]{position:absolute;top:16px;left:50%;transform:translate(-50%);background:#fffffff2;border:1px solid rgba(148,163,184,.4);border-radius:12px;padding:10px 18px;font-size:14px;color:#1f2937;z-index:30;box-shadow:0 12px 24px #0f172a1f}.map-widget__state--error[data-v-73d647f9]{color:#b91c1c;border-color:#dc262659}.map-widget__filter-host[data-v-73d647f9]{position:absolute;left:430px;flex:0 0 auto;width:0;align-self:stretch;pointer-events:auto;z-index:21}.map-widget__overlay-grid[data-v-73d647f9]{position:absolute;top:0;right:0;bottom:0;left:0;font-family:inherit;z-index:20;pointer-events:none;display:flex;justify-content:space-between;padding:16px 16px 36px}.map-widget__side[data-v-73d647f9]{flex:0 0 auto;display:flex;flex-direction:column;justify-content:flex-start;height:100%;width:min(100%,400px);pointer-events:none}.map-widget__side--right[data-v-73d647f9]{align-items:flex-end}.map-widget__stack-wrapper[data-v-73d647f9]{display:flex;flex-direction:column;min-height:0;pointer-events:none;max-height:100%;max-width:calc(100% - 29px)}.map-widget__stack-wrapper--top[data-v-73d647f9]{flex:1 1 auto}.map-widget__stack-wrapper--bottom[data-v-73d647f9]{flex:0 0 auto;margin-top:auto;padding-top:16px}.map-widget__stack[data-v-73d647f9]{display:flex;flex-direction:column;gap:12px;max-height:100%;min-height:0;width:min(100%,400px);pointer-events:auto;overflow-y:auto;padding-right:4px}.map-overlay__item[data-v-73d647f9]{display:contents;flex-direction:column;flex:0 1 auto;max-width:100%;max-height:100%;min-height:0;width:100%;overflow:hidden}.map-widget__filter-host[data-v-73d647f9]{left:16px;top:16px;z-index:82}@media(min-width:768px){.map-widget__filter-host[data-v-73d647f9]{left:397px}}[data-v-75f83258] .hide-add-btn button.rounded-full{display:none!important}.custom-pagination[data-v-6f5da01d] .items-center{display:block}.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact.maplibregl-compact{display:none}.maplibre-demo-map-container{height:100%;width:100%;position:relative}#maplibre-demo-map{height:100%;width:100%;position:absolute}.map-widgets-flex{width:100%;height:100%;display:flex;justify-content:space-between;padding:20px;box-sizing:border-box}.widgets-left,.widgets-right{display:flex;flex-direction:column;gap:10px;height:100%;width:400px;pointer-events:none}.widgets-right .widget-column{align-items:flex-end}.widgets-left{align-items:flex-start}.widget-column{display:flex;flex-direction:column;gap:10px;z-index:10;height:100%}.widgets-top{overflow-y:auto}.widgets-bottom{flex-shrink:0}.widgets-top,.widgets-bottom{display:flex;flex-direction:column;gap:8px;pointer-events:auto;overflow-y:auto}.widgets-top{align-items:flex-start}.widgets-bottom{align-items:flex-end;margin-top:auto}.widgets-left{justify-content:flex-start}
1
+ th[data-v-93fedaf0]{position:sticky;top:0;background:#fff}.mapLayer-filter[data-v-cc1f0579]{display:inline-flex;position:relative}.mapLayer-filter__trigger[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer;border-radius:50%;transition:background .2s ease}.mapLayer-filter__trigger[data-v-cc1f0579]:hover:not(.mapLayer-filter__trigger--disabled){background:#d4dae033}.mapLayer-filter__trigger:hover:not(.mapLayer-filter__trigger--disabled) .mapLayer-filter__icon[data-v-cc1f0579]{color:#1d4ed8}.mapLayer-filter__trigger--disabled[data-v-cc1f0579]{cursor:not-allowed;opacity:.5;pointer-events:auto}.mapLayer-filter__icon[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;color:#475569;transition:color .2s ease}.mapLayer-filter__trigger--disabled .mapLayer-filter__icon[data-v-cc1f0579]{color:inherit}.mapLayer-filter__popover[data-v-cc1f0579]{position:absolute;max-width:min-content}.mapLayer-filter__popover--static[data-v-cc1f0579]{position:static;top:auto;left:auto;transform:none!important}.map-filter[data-v-cc1f0579]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px}.map-filter__header[data-v-cc1f0579]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.map-filter__title[data-v-cc1f0579]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-cc1f0579]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1}.map-filter__close[data-v-cc1f0579]:hover{background:#3b82f633;color:#2563eb}.filter-badge__hint[data-v-cc1f0579]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.map-filter[data-v-98772410]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:240px}.map-filter__header[data-v-98772410]{display:flex;align-items:center;justify-content:space-between}.map-filter__title[data-v-98772410]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-98772410]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer}.map-filter__close[data-v-98772410]:hover{background:#3b82f633;color:#2563eb}.card[data-v-763da13a]{font-family:inherit}.fade-enter-active[data-v-763da13a],.fade-leave-active[data-v-763da13a]{transition:opacity .2s ease}.fade-enter-from[data-v-763da13a],.fade-leave-to[data-v-763da13a]{opacity:0}.map-center-control[data-v-80ea583c]{display:flex;gap:.5rem}.map-widget__filter-host[data-v-5195b994]{position:absolute;left:10px;top:100px;align-self:stretch;pointer-events:auto;z-index:21}.mapLayer-info[data-v-cc1cc7bf]{display:inline-flex;position:relative}.mapLayer-info__trigger[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer}.mapLayer-info__icon[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transition:color .2s ease}.mapLayer-info__icon[data-v-cc1cc7bf]:hover{color:#1d4ed8}.mapLayer-info__popover[data-v-cc1cc7bf]{position:absolute;min-width:200px}.mapLayer-info__inner[data-v-cc1cc7bf]{display:flex;flex-direction:column;gap:0}.mapLayer-info__item[data-v-cc1cc7bf]{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:flex-start;padding:6px 0;border-bottom:1px solid #e2e8f0}.mapLayer-info__item[data-v-cc1cc7bf]:last-child{border-bottom:none}.mapLayer-info__item-label[data-v-cc1cc7bf]{font-size:12px;color:#475569;font-weight:600}.mapLayer-info__item-value[data-v-cc1cc7bf]{font-size:13px;color:#1f2937}.mapLayer-info__item-value--break-all[data-v-cc1cc7bf]{word-break:break-all}.map-info[data-v-813e24fb]{width:100%}.map-info__header[data-v-813e24fb]{display:flex;justify-content:space-between;align-items:flex-start;gap:30px;padding:20px 20px 12px}.map-info__actions[data-v-813e24fb]{display:flex;align-items:center;gap:8px}.map-info__title[data-v-813e24fb]{margin:0;font-size:18px;line-height:1.3;font-weight:600;color:#1f2937}.map-info__menu[data-v-813e24fb]{position:relative}.map-info__menu-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__menu-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__popover[data-v-813e24fb]{position:absolute;background:#fff;box-shadow:0 10px 40px 10px #00000014;border-radius:12px;padding:8px 12px;min-width:160px;z-index:50}.map-info__popover-link[data-v-813e24fb]{display:block;padding:6px 0;font-size:13px;color:#1f2937;text-decoration:none}.map-info__popover-link[data-v-813e24fb]:hover{color:#1d4ed8}.map-info__content[data-v-813e24fb]{padding:0 20px 20px;font-size:14px;color:#34495e;transition:max-height .3s ease,opacity .3s ease,padding .3s ease;overflow:hidden;max-height:1000px;opacity:1}.map-info__content--collapsed[data-v-813e24fb]{max-height:0;opacity:0;padding:0 20px 5px}.map-info__content[data-v-813e24fb] p{margin:0 0 12px}.map-info__toggle-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__toggle-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__toggle-icon--rotated[data-v-813e24fb]{transform:rotate(180deg)}.opacity-btn[data-v-b278347a]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.opacity-btn[data-v-b278347a]:hover{background:#94a3b829;color:#1f2937}.opacity-popover[data-v-b278347a]{position:fixed;z-index:102;padding:12px;width:260px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.opacity-popover__content[data-v-b278347a]{display:flex;align-items:center;gap:8px}.opacity-popover__label[data-v-b278347a]{font-size:12px;color:#6b7280}.opacity-popover__range[data-v-b278347a]{flex:1 1 auto;accent-color:#2563eb}.opacity-popover__value[data-v-b278347a]{font-size:12px;color:#475569}.layers-panel[data-v-cd741b3d]{display:flex;flex-direction:column;background:#fff;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:220px}.layers-panel__header[data-v-cd741b3d]{display:flex;justify-content:space-between;align-items:center;gap:16px}.layers-panel__header-actions[data-v-cd741b3d]{display:flex;align-items:center;gap:8px}.layers-panel__heading[data-v-cd741b3d]{display:flex;flex-direction:column;gap:6px}.layers-panel__title[data-v-cd741b3d]{font-size:18px;font-weight:600;color:#1f2937}.layers-panel__description[data-v-cd741b3d]{margin:0;font-size:14px;color:#34495e}.layers-panel__clear[data-v-cd741b3d]{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:10px;border:1px solid rgba(59,130,246,.6);background-color:#3b82f614;color:#1d4ed8;font-size:12px;font-weight:500;line-height:1;transition:background-color .15s ease,color .15s ease}.layers-panel__clear[data-v-cd741b3d]:hover{background-color:#2563eb26;color:#1e40af}.layers-panel__item[data-v-cd741b3d]{display:flex;align-items:center;justify-content:space-between;gap:12px}.layers-panel__label[data-v-cd741b3d]{display:flex;flex-direction:column;gap:4px;color:#334155;width:100%}.layers-panel__label-row[data-v-cd741b3d]{display:flex;align-items:center;gap:12px}.layers-panel__title-block[data-v-cd741b3d]{display:inline-flex;align-items:center;gap:8px;flex:1;min-width:0}.layers-panel__checkbox[data-v-cd741b3d]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border:2px solid #2563eb;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:#fff;transition:all .15s ease}.layers-panel__checkbox[data-v-cd741b3d]:checked{background:#2563eb;border-color:#2563eb}.layers-panel__checkbox[data-v-cd741b3d]:checked:after{content:"";width:9px;height:9px;display:block;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='9' viewBox='0 0 12 9' fill='none'%3E%3Cpath d='M10.3332 1.5L4.49984 7.33333L1.6665 4.5' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat}.layers-panel__checkbox[data-v-cd741b3d]:hover{border-color:#1d4ed8}.layers-panel__name[data-v-cd741b3d]{font-size:14px;font-weight:400;color:#1f2937;min-width:0}.layers-panel__meta[data-v-cd741b3d]{display:flex;align-items:center;gap:4px;margin-left:auto}.layers-panel__legend-dot[data-v-cd741b3d]{width:11px;height:11px;border-radius:50%;display:inline-block;flex-shrink:0}.layers-panel__legend-dot--inline[data-v-cd741b3d]{border:1px solid rgba(148,163,184,.5);box-shadow:0 0 0 1px #ffffff59}.layers-panel__actions[data-v-cd741b3d]{display:flex;align-items:center;gap:4px}.layers-panel__action[data-v-cd741b3d]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;cursor:pointer;padding:0;color:#475569}.layers-panel__action[data-v-cd741b3d]:hover{color:#1d4ed8}.layers-panel__content[data-v-cd741b3d]{display:flex;flex-direction:column;gap:10px;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1;margin-top:15px}.layers-panel__content--collapsed[data-v-cd741b3d]{margin-top:-5px;max-height:0;opacity:0;gap:0}.layers-panel__toggle-button[data-v-cd741b3d]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.layers-panel__toggle-button[data-v-cd741b3d]:hover{background:#94a3b833}.layers-panel__toggle-icon--rotated[data-v-cd741b3d]{transform:rotate(180deg);transition:transform .3s ease}.catalog-tab[data-v-f68d8bda]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.catalog-tab__search[data-v-f68d8bda]{position:sticky;top:0;background:inherit;z-index:1;padding-bottom:8px}.catalog-tab__list[data-v-f68d8bda]{flex:1 1 auto;display:flex;flex-direction:column;overflow-y:auto;min-height:0;padding-bottom:8px}.fade-enter-active[data-v-f68d8bda],.fade-leave-active[data-v-f68d8bda]{transition:all .2s ease}.fade-enter-from[data-v-f68d8bda],.fade-leave-to[data-v-f68d8bda]{opacity:0;max-height:0}.filter-badge[data-v-f68d8bda]{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:9999px;background:#94a3b826;color:#475569;font-size:11px;font-weight:600;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.filter-badge[data-v-f68d8bda]:hover{background:#94a3b840;color:#1f2937}.filter-badge--disabled[data-v-f68d8bda]{cursor:not-allowed;background:#94a3b814;color:#475569b3}.filter-badge__icon[data-v-f68d8bda]{width:14px;height:14px}.filter-badge__hint[data-v-f68d8bda]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.selected-tab[data-v-39b6f281]{display:flex;flex-direction:column;gap:12px;height:100%;min-height:0}.selected-tab__actions[data-v-39b6f281]{flex:0 0 auto}.selected-tab__add[data-v-39b6f281]{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:8px 12px;border-radius:10px;background:#3b82f614;color:#2563eb;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__add[data-v-39b6f281]:hover{background:#3b82f629;color:#1d4ed8}.selected-tab__empty[data-v-39b6f281]{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px dashed rgba(148,163,184,.6);border-radius:16px;padding:24px;background:#f8fafce6;text-align:center;color:#6b7280}.selected-tab__empty-title[data-v-39b6f281]{margin:0;font-weight:600;color:#1f2937}.selected-tab__empty-text[data-v-39b6f281]{margin:0;font-size:13px}.selected-tab__scroll[data-v-39b6f281]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px;display:flex;flex-direction:column}.selected-tab__scroll>div[data-v-39b6f281]{display:flex;flex-direction:column;gap:8px}.selected-tab__item[data-v-39b6f281]{border:1px solid #e5e7eb;border-radius:10px;padding:12px;background:#fff;color:#4b5563;font-size:13px;transition:background .2s ease,border-color .2s ease}.selected-tab__item[data-v-39b6f281]:hover{background:#f8fafccc}.selected-tab__item--dragging[data-v-39b6f281]{opacity:.5}.selected-tab__item--over[data-v-39b6f281]{border-color:#2563eb;background:#3b82f61f}.selected-tab__item-header[data-v-39b6f281]{display:flex;align-items:center;justify-content:space-between;gap:12px}.selected-tab__item-info[data-v-39b6f281]{display:flex;align-items:center;gap:8px;cursor:move;color:#1f2937}.selected-tab__item-handle[data-v-39b6f281]{color:#64748bcc;font-size:16px}.selected-tab__item-checkbox[data-v-39b6f281]{width:16px;height:16px;accent-color:#2563eb}.selected-tab__item-controls[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__item-opacity[data-v-39b6f281],.selected-tab__item-menu[data-v-39b6f281]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__item-opacity[data-v-39b6f281]:hover,.selected-tab__item-menu[data-v-39b6f281]:hover{background:#94a3b829;color:#1f2937}.selected-tab__popover[data-v-39b6f281]{position:fixed;z-index:102;padding:12px;width:240px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.selected-tab__popover-content[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__popover-label[data-v-39b6f281]{font-size:12px;color:#6b7280}.selected-tab__popover-range[data-v-39b6f281]{flex:1 1 auto;accent-color:#2563eb}.selected-tab__popover-value[data-v-39b6f281]{font-size:12px;color:#475569}.selected-tab__menu[data-v-39b6f281]{position:fixed;z-index:102;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26;padding:12px}.selected-tab__menu-inner[data-v-39b6f281]{display:flex;flex-direction:column;gap:4px;width:190px}.selected-tab__menu-item[data-v-39b6f281]{display:flex;align-items:center;gap:8px;padding:6px 8px;border:none;background:transparent;color:#1f2937;font-size:13px;text-align:left;cursor:pointer;transition:background .2s ease}.selected-tab__menu-item[data-v-39b6f281]:hover{background:#94a3b829}.selected-tab__menu-item--disabled[data-v-39b6f281]{color:#63666a99;cursor:not-allowed}.selected-tab__menu-item--danger[data-v-39b6f281]{color:#dc2626}.selected-tab__menu-item--danger[data-v-39b6f281]:hover{background:#dc26261f}.filter-tab[data-v-c6632fbd]{display:flex;flex-direction:column;gap:16px;height:100%;min-height:0}.filter-tab__header[data-v-c6632fbd]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.filter-tab__subtitle[data-v-c6632fbd]{margin:0 0 4px;font-size:12px;font-weight:500;color:#6b7280}.filter-tab__title[data-v-c6632fbd]{margin:0;font-size:16px;font-weight:600;color:#1f2937}.filter-tab__content[data-v-c6632fbd]{flex:1 1 auto;min-height:0;background:#fffffff0;border:1px solid rgba(148,163,184,.35);box-shadow:0 16px 32px #0f172a1a}.filter-tab__scroll[data-v-c6632fbd]{max-height:100%;overflow-y:auto;padding:0}.filter-tab__empty[data-v-c6632fbd]{padding:24px;text-align:center;background:#f8fafce6;border:1px dashed rgba(148,163,184,.6);border-radius:16px}.filter-tab__empty-title[data-v-c6632fbd]{margin:0 0 8px;font-size:15px;font-weight:600;color:#1f2937}.filter-tab__empty-text[data-v-c6632fbd]{margin:0;font-size:13px;color:#6b7280}.map-catalog-widget[data-v-0023ade8]{display:flex;flex-direction:column;max-height:100%;overflow:hidden}.map-catalog-widget__body[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.map-catalog-widget__scroll[data-v-0023ade8]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px}.map-catalog-widget__content[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1}.map-catalog-widget__content--collapsed[data-v-0023ade8]{max-height:0;opacity:0;padding:0}.map-catalog-widget__toggle-button[data-v-0023ade8]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-catalog-widget__toggle-button[data-v-0023ade8]:hover{background:#94a3b833}.map-catalog-widget__toggle-icon--rotated[data-v-0023ade8]{transform:rotate(180deg);transition:transform .3s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:9999px;background:#94a3b82e;color:#475569;border:none;padding:0;transition:background-color .15s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge:hover,.map-attribute__filter[data-v-9686ce7b] .filter-badge.filter-badge--active{background:#2563eb2e;color:#1d4ed8}.map-attribute__filter[data-v-9686ce7b] .filter-badge__icon{width:16px;height:16px}.map-attribute__filter[data-v-9686ce7b] .filter-badge__panel{border-radius:16px;box-shadow:0 16px 32px #0f172a14}.map-search-widget[data-v-d773179e]{width:100%}.map-print-control[data-v-4fae7635]{z-index:35;display:flex;flex-direction:column;align-items:flex-end;gap:12px}[data-v-4fae7635] .mapboxgl-export-list{display:none;min-width:280px;padding:20px 16px 16px;border-radius:16px;background:#fffffffa;box-shadow:0 18px 40px #0f172a40;color:#0f172a;font-size:14px;line-height:1.4;margin-right:40px}[data-v-4fae7635] .mapboxgl-export-list table{width:100%;border-collapse:separate;border-spacing:0 12px}[data-v-4fae7635] .mapboxgl-export-list td:first-child{width:35%;font-weight:500;color:#334155;padding-right:12px}[data-v-4fae7635] .mapboxgl-export-list label{display:inline-flex;align-items:center}[data-v-4fae7635] .mapboxgl-export-list select{width:100%;height:36px;border-radius:10px;border:1px solid rgba(15,23,42,.1);padding:0 12px;font-size:14px;color:#0f172a;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-v-4fae7635] .mapboxgl-export-list select:focus{outline:none;border-color:#0f172a40;box-shadow:0 0 0 2px #3b82f633}[data-v-4fae7635] .mapboxgl-export-list .generate-button{margin-top:12px;width:100%;height:40px;border-radius:12px;border:none;background:linear-gradient(134deg,#2563eb,#1d4ed8);color:#fff;font-weight:600;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}[data-v-4fae7635] .mapboxgl-export-list .generate-button:hover{transform:translateY(-1px);box-shadow:0 14px 28px #2563eb59}[data-v-4fae7635] .mapboxgl-export-list .generate-button:active{transform:translateY(0);box-shadow:0 10px 20px #2563eb4d}.cursor-coordinates[data-v-334315d9]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:12px;background:#ffffffeb;color:#1f2937;box-shadow:0 10px 22px #0f172a29;font-size:12px;max-width:240px}.cursor-coordinates__icon[data-v-334315d9]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:#2563eb}.cursor-coordinates__icon svg[data-v-334315d9]{width:100%;height:100%}.cursor-coordinates__text[data-v-334315d9]{white-space:nowrap;font-family:ui-monospace,SFMono-Regular,SFMono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.minimap[data-v-bc754c89]{position:relative}.minimap__button[data-v-bc754c89]{width:32px;height:32px;border-radius:50%;border:1px solid rgba(148,163,184,.35);background:#ffffffeb;color:#334155;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 6px 16px #0f172a1f;transition:all .2s ease}.minimap__button[data-v-bc754c89]:hover{border-color:#3b82f680;color:#1d4ed8}.minimap__button-icon[data-v-bc754c89]{transition:transform .2s ease}.minimap__wrapper[data-v-bc754c89]{position:absolute;bottom:2.5rem;right:2rem;border-radius:10px;overflow:hidden;border:1px solid rgba(148,163,184,.4);box-shadow:0 10px 22px #0f172a1f;background:#fff}.minimap-slide-enter-active[data-v-bc754c89],.minimap-slide-leave-active[data-v-bc754c89]{transition:opacity .2s ease,transform .2s ease}.minimap-slide-enter-from[data-v-bc754c89],.minimap-slide-leave-to[data-v-bc754c89]{opacity:0;transform:translate(12px)}.map-widget[data-v-73d647f9]{position:relative;width:100%;background:#f1f5f9;overflow:hidden}.map-widget__view[data-v-73d647f9]{font-family:inherit;width:100%;height:100%}.map-widget__state[data-v-73d647f9]{position:absolute;top:16px;left:50%;transform:translate(-50%);background:#fffffff2;border:1px solid rgba(148,163,184,.4);border-radius:12px;padding:10px 18px;font-size:14px;color:#1f2937;z-index:30;box-shadow:0 12px 24px #0f172a1f}.map-widget__state--error[data-v-73d647f9]{color:#b91c1c;border-color:#dc262659}.map-widget__filter-host[data-v-73d647f9]{position:absolute;left:430px;flex:0 0 auto;width:0;align-self:stretch;pointer-events:auto;z-index:21}.map-widget__overlay-grid[data-v-73d647f9]{position:absolute;top:0;right:0;bottom:0;left:0;font-family:inherit;z-index:20;pointer-events:none;display:flex;justify-content:space-between;padding:16px 16px 36px}.map-widget__side[data-v-73d647f9]{flex:0 0 auto;display:flex;flex-direction:column;justify-content:flex-start;height:100%;width:min(100%,400px);pointer-events:none}.map-widget__side--right[data-v-73d647f9]{align-items:flex-end}.map-widget__stack-wrapper[data-v-73d647f9]{display:flex;flex-direction:column;min-height:0;pointer-events:none;max-height:100%;max-width:calc(100% - 29px)}.map-widget__stack-wrapper--top[data-v-73d647f9]{flex:1 1 auto}.map-widget__stack-wrapper--bottom[data-v-73d647f9]{flex:0 0 auto;margin-top:auto;padding-top:16px}.map-widget__stack[data-v-73d647f9]{display:flex;flex-direction:column;gap:12px;max-height:100%;min-height:0;width:min(100%,400px);pointer-events:auto;overflow-y:auto;padding-right:4px}.map-overlay__item[data-v-73d647f9]{display:contents;flex-direction:column;flex:0 1 auto;max-width:100%;max-height:100%;min-height:0;width:100%;overflow:hidden}.map-widget__filter-host[data-v-73d647f9]{left:16px;top:16px;z-index:82}@media (min-width: 768px){.map-widget__filter-host[data-v-73d647f9]{left:397px}}[data-v-75f83258] .hide-add-btn button.rounded-full{display:none!important}.custom-pagination[data-v-6f5da01d] .items-center{display:block}.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact.maplibregl-compact{display:none}.maplibre-demo-map-container{height:100%;width:100%;position:relative}#maplibre-demo-map{height:100%;width:100%;position:absolute}.map-widgets-flex{width:100%;height:100%;display:flex;justify-content:space-between;padding:20px;box-sizing:border-box}.widgets-left,.widgets-right{display:flex;flex-direction:column;gap:10px;height:100%;width:400px;pointer-events:none}.widgets-right .widget-column{align-items:flex-end}.widgets-left{align-items:flex-start}.widget-column{display:flex;flex-direction:column;gap:10px;z-index:10;height:100%}.widgets-top{overflow-y:auto}.widgets-bottom{flex-shrink:0}.widgets-top,.widgets-bottom{display:flex;flex-direction:column;gap:8px;pointer-events:auto;overflow-y:auto}.widgets-top{align-items:flex-start}.widgets-bottom{align-items:flex-end;margin-top:auto}.widgets-left{justify-content:flex-start}
package/dist/index.js CHANGED
@@ -4565,7 +4565,7 @@ function Uo(e, t = {}) {
4565
4565
  return Dt(n, r), n.filter(Boolean);
4566
4566
  }
4567
4567
  function ep(e) {
4568
- return e ? !!((/* @__PURE__ */ new Set(["point", "line", "polygon"])).has(e.type) || e.icon || e.attrType || e.color || e.stroke || e.radius || e.width) : !1;
4568
+ return e ? !!((/* @__PURE__ */ new Set(["point", "line", "polygon"])).has(e.type) || e.icon || e.attrType || e.color || e.stroke || e.radius || e.width || e.colorAttr && e.colors && typeof e.colors == "object" && Object.keys(e.colors).length > 0) : !1;
4569
4569
  }
4570
4570
  function qo(e, {
4571
4571
  sourceType: t,
@@ -146,7 +146,7 @@
146
146
  `+t.slice(l,a),l=a+1),i=s;return f+=`
147
147
  `,t.length-l>n&&i>l?f+=t.slice(l,i)+`
148
148
  `+t.slice(i+1):f+=t.slice(l),f.slice(1)}function Fd(t){for(var n="",o=0,r,l=0;l<t.length;o>=65536?l+=2:l++)o=_t(t,l),r=Ae[o],!r&&wt(o)?(n+=t[l],o>=65536&&(n+=t[l+1])):n+=r||Bd(o);return n}function Md(t,n,o){var r="",l=t.tag,a,i,s;for(a=0,i=o.length;a<i;a+=1)s=o[a],t.replacer&&(s=t.replacer.call(o,String(a),s)),(qe(t,n,s,!1,!1)||typeof s>"u"&&qe(t,n,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=l,t.dump="["+r+"]"}function Uo(t,n,o,r){var l="",a=t.tag,i,s,f;for(i=0,s=o.length;i<s;i+=1)f=o[i],t.replacer&&(f=t.replacer.call(o,String(i),f)),(qe(t,n+1,f,!0,!0,!1,!0)||typeof f>"u"&&qe(t,n+1,null,!0,!0,!1,!0))&&((!r||l!=="")&&(l+=tn(t,n)),t.dump&&bt===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=a,t.dump=l||"[]"}function Dd(t,n,o){var r="",l=t.tag,a=Object.keys(o),i,s,f,u,x;for(i=0,s=a.length;i<s;i+=1)x="",r!==""&&(x+=", "),t.condenseFlow&&(x+='"'),f=a[i],u=o[f],t.replacer&&(u=t.replacer.call(o,f,u)),qe(t,n,f,!1,!1)&&(t.dump.length>1024&&(x+="? "),x+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),qe(t,n,u,!1,!1)&&(x+=t.dump,r+=x));t.tag=l,t.dump="{"+r+"}"}function Id(t,n,o,r){var l="",a=t.tag,i=Object.keys(o),s,f,u,x,c,g;if(t.sortKeys===!0)i.sort();else if(typeof t.sortKeys=="function")i.sort(t.sortKeys);else if(t.sortKeys)throw new Me("sortKeys must be a boolean or a function");for(s=0,f=i.length;s<f;s+=1)g="",(!r||l!=="")&&(g+=tn(t,n)),u=i[s],x=o[u],t.replacer&&(x=t.replacer.call(o,u,x)),qe(t,n+1,u,!0,!0,!0)&&(c=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,c&&(t.dump&&bt===t.dump.charCodeAt(0)?g+="?":g+="? "),g+=t.dump,c&&(g+=tn(t,n)),qe(t,n+1,x,!0,c)&&(t.dump&&bt===t.dump.charCodeAt(0)?g+=":":g+=": ",g+=t.dump,l+=g));t.tag=a,t.dump=l||"{}"}function qo(t,n,o){var r,l,a,i,s,f;for(l=o?t.explicitTypes:t.implicitTypes,a=0,i=l.length;a<i;a+=1)if(s=l[a],(s.instanceOf||s.predicate)&&(!s.instanceOf||typeof n=="object"&&n instanceof s.instanceOf)&&(!s.predicate||s.predicate(n))){if(o?s.multi&&s.representName?t.tag=s.representName(n):t.tag=s.tag:t.tag="?",s.represent){if(f=t.styleMap[s.tag]||s.defaultStyle,Vo.call(s.represent)==="[object Function]")r=s.represent(n,f);else if(Co.call(s.represent,f))r=s.represent[f](n,f);else throw new Me("!<"+s.tag+'> tag resolver accepts not "'+f+'" style');t.dump=r}return!0}return!1}function qe(t,n,o,r,l,a,i){t.tag=null,t.dump=o,qo(t,o,!1)||qo(t,o,!0);var s=Vo.call(t.dump),f=r,u;r&&(r=t.flowLevel<0||t.flowLevel>n);var x=s==="[object Object]"||s==="[object Array]",c,g;if(x&&(c=t.duplicates.indexOf(o),g=c!==-1),(t.tag!==null&&t.tag!=="?"||g||t.indent!==2&&n>0)&&(l=!1),g&&t.usedDuplicates[c])t.dump="*ref_"+c;else{if(x&&g&&!t.usedDuplicates[c]&&(t.usedDuplicates[c]=!0),s==="[object Object]")r&&Object.keys(t.dump).length!==0?(Id(t,n,t.dump,l),g&&(t.dump="&ref_"+c+t.dump)):(Dd(t,n,t.dump),g&&(t.dump="&ref_"+c+" "+t.dump));else if(s==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!i&&n>0?Uo(t,n-1,t.dump,l):Uo(t,n,t.dump,l),g&&(t.dump="&ref_"+c+t.dump)):(Md(t,n,t.dump),g&&(t.dump="&ref_"+c+" "+t.dump));else if(s==="[object String]")t.tag!=="?"&&Ld(t,t.dump,n,a,f);else{if(s==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Me("unacceptable kind of an object to dump "+s)}t.tag!==null&&t.tag!=="?"&&(u=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?u="!"+u:u.slice(0,18)==="tag:yaml.org,2002:"?u="!!"+u.slice(18):u="!<"+u+">",t.dump=u+" "+t.dump)}return!0}function jd(t,n){var o=[],r=[],l,a;for(on(t,o,r),l=0,a=r.length;l<a;l+=1)n.duplicates.push(o[r[l]]);n.usedDuplicates=new Array(a)}function on(t,n,o){var r,l,a;if(t!==null&&typeof t=="object")if(l=n.indexOf(t),l!==-1)o.indexOf(l)===-1&&o.push(l);else if(n.push(t),Array.isArray(t))for(l=0,a=t.length;l<a;l+=1)on(t[l],n,o);else for(r=Object.keys(t),l=0,a=r.length;l<a;l+=1)on(t[r[l]],n,o)}function zd(t,n){n=n||{};var o=new Cd(n);o.noRefs||jd(t,o);var r=t;return o.replacer&&(r=o.replacer.call({"":r},"",r)),qe(o,0,r,!0,!0)?o.dump+`
149
- `:""}var Od=zd,Pd={dump:Od};function ln(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var Rd=ve,Ud=Hn,qd=Gn,Hd=eo,Wd=to,Yd=Gt,Ho=Bo.load,Zd=Bo.loadAll,Wo=Pd.dump,Gd=Me,Kd={binary:ao,float:Qn,map:Zn,null:Kn,pairs:so,set:co,timestamp:lo,bool:Xn,int:Jn,merge:ro,omap:io,seq:Yn,str:Wn},Xd=ln("safeLoad","load"),Jd=ln("safeLoadAll","loadAll"),Qd=ln("safeDump","dump"),Yo={Type:Rd,Schema:Ud,FAILSAFE_SCHEMA:qd,JSON_SCHEMA:Hd,CORE_SCHEMA:Wd,DEFAULT_SCHEMA:Yd,load:Ho,loadAll:Zd,dump:Wo,YAMLException:Gd,types:Kd,safeLoad:Xd,safeLoadAll:Jd,safeDump:Qd};const pt="#9ca3af";function rn(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const eu={},tu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-settings"};function nu(t,n){return e.openBlock(),e.createElementBlock("svg",tu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Zo=oe(eu,[["render",nu]]),ou={},lu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers"};function ru(t,n){return e.openBlock(),e.createElementBlock("svg",lu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"},null,-1),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"},null,-1),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"},null,-1)])])}const au=oe(ou,[["render",ru]]),iu={},su={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-eye"};function cu(t,n){return e.openBlock(),e.createElementBlock("svg",su,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const du=oe(iu,[["render",cu]]),uu={},pu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map"};function mu(t,n){return e.openBlock(),e.createElementBlock("svg",pu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"},null,-1),e.createElementVNode("path",{d:"M15 5.764v15"},null,-1),e.createElementVNode("path",{d:"M9 3.236v15"},null,-1)])])}const fu=oe(uu,[["render",mu]]),gu={},yu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-filter"};function hu(t,n){return e.openBlock(),e.createElementBlock("svg",yu,[...n[0]||(n[0]=[e.createElementVNode("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"},null,-1)])])}const xu=oe(gu,[["render",hu]]),Dt=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(null);let a=null,i=null,s=!1;function f(){return new Promise((x,c)=>{if(i)return x(i);if(window.monaco)return i=window.monaco,x(i);const g=y=>{if([...document.styleSheets].some(h=>{var p;return(p=h==null?void 0:h.href)==null?void 0:p.includes(y)}))return;const m=document.createElement("link");m.rel="stylesheet",m.href=y,document.head.appendChild(m)},d=y=>new Promise((m,h)=>{const p=document.createElement("script");p.src=y,p.onload=()=>m(!0),p.onerror=h,document.body.appendChild(p)});g("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),d("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{i=window.monaco,x(i)})}).catch(c)})}function u(){var x,c;!l.value||!i||(a&&a.dispose(),a=i.editor.create(l.value,{value:o.modelValue||"",language:o.language||"yaml",theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1}}),(c=(x=i.languages)==null?void 0:x.css)!=null&&c.cssDefaults&&i.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),a.onDidChangeModelContent(()=>{s||r("update:modelValue",a.getValue())}))}return e.watch(()=>o.modelValue,x=>{if(!a)return;const c=a.getValue();x!==c&&(s=!0,a.setValue(x||""),s=!1)}),e.watch(()=>o.language,x=>{a&&i&&i.editor.setModelLanguage(a.getModel(),x||"yaml")}),e.watch(()=>o.theme,x=>{a&&i&&i.editor.setTheme(x||"vs-light")}),e.onMounted(async()=>{await f(),u()}),e.onBeforeUnmount(()=>{a&&a.dispose()}),(x,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),bu={class:"flex flex-col flex-1 overflow-hidden"},ku={class:"flex justify-end gap-2"},wu=["href"],_u={class:"flex flex-col flex-1 overflow-hidden"},Eu={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Nu={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Bu=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleText,f=>{const u=f??"";l.value!==u&&(l.value=u)},{immediate:!0}),e.watch(l,async f=>{var x,c;const u=f??"";o.styleText!==u&&r("update:style-text",u);try{const g=f?Ho(f):null;if((x=g==null?void 0:g.colorAttr)!=null&&x.length&&((c=o.styleYaml)==null?void 0:c.colorAttr)!==g.colorAttr){const d=await a(g.colorAttr);g.colors=d.reduce((m,h,p)=>({...m,[h.id.toString()]:i[p]}),{});const y=Wo(g);y!==l.value&&(l.value=y)}JSON.stringify(g)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",g&&typeof g=="object"?g:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function a(f){return(await fetch(`/api/gis-service/${o.token}/${f}`).then(x=>x.json())).rows}const i=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],s=async()=>{const f=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:f})}),r("update"),ce.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(u){ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(u)}};return(f,u)=>(e.openBlock(),e.createElementBlock("div",bu,[e.createElementVNode("div",ku,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,wu),e.createElementVNode("button",{onClick:s,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...u[1]||(u[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",_u,[e.createElementVNode("div",Eu,[u[2]||(u[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",Nu,[e.createVNode(Dt,{modelValue:l.value,"onUpdate:modelValue":u[0]||(u[0]=x=>l.value=x),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}});function mt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function ft(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=mt(t[0]),o=mt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return ft(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=mt(o),a=mt(r);if(l!=null&&a!=null)return[l,a]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=mt(n),l=mt(o);return r!=null&&l!=null?[r,l]:null}return null}const Go=Symbol("MapContext");function Vu(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],a=()=>{r=!0,l.length&&l.forEach(g=>g())},i=()=>{const g=t.container;return typeof g=="string"?document.getElementById(g):(g==null?void 0:g.value)!==void 0?g.value:g},s=()=>r?Promise.resolve():new Promise(g=>l.push(g)),f=(g,d)=>{if(g==null)return d;const y=Number(typeof g=="string"?g.trim():g);return Number.isFinite(y)?y:d},u=async()=>{var A,F,D,$,w,C,E;if(typeof window>"u"||n.value)return;const g=i();if(!g)throw new Error("Map container not found");const d=t.settings||null,y=ft((A=d==null?void 0:d.map)==null?void 0:A.center)||[30,50],m=f((F=d==null?void 0:d.map)==null?void 0:F.zoom,7),h=f((D=d==null?void 0:d.map)==null?void 0:D.maxZoom,20),_={...{attributionControl:!1,center:y,zoom:m,maxZoom:h,minZoom:4},...t.mapOptions||{},container:g};_.maxZoom==null&&(_.maxZoom=h),n.value=new maplibregl.Map(_),($=t.controls)!=null&&$.navigation&&n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),(w=t.controls)!=null&&w.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(C=t.controls)!=null&&C.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(E=t.controls)!=null&&E.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{o.value=!0,a()})},x=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(u),e.onUnmounted(x);const c={map:n,ready:s,flyTo:g=>{var d;return(d=n.value)==null?void 0:d.flyTo(g)},fitBounds:(g,d)=>{var y;return(y=n.value)==null?void 0:y.fitBounds(g,d)},setCenter:g=>{var d;return(d=n.value)==null?void 0:d.setCenter(g)},setZoom:g=>{var d;return(d=n.value)==null?void 0:d.setZoom(g)},addControl:(g,d)=>{var y;return(y=n.value)==null?void 0:y.addControl(g,d)},removeControl:g=>{var d;return(d=n.value)==null?void 0:d.removeControl(g)},on:(g,d,y)=>{var m,h;return typeof d=="string"?((m=n.value)==null||m.on(g,d,y),()=>{var p;return(p=n.value)==null?void 0:p.off(g,d,y)}):((h=n.value)==null||h.on(g,d),()=>{var p;return(p=n.value)==null?void 0:p.off(g,d)})},off:(g,d,y)=>{var m,h;typeof d=="string"?(m=n.value)==null||m.off(g,d,y):(h=n.value)==null||h.off(g,d)},project:g=>{var d;return(d=n.value)==null?void 0:d.project(g)},unproject:g=>{var d;return(d=n.value)==null?void 0:d.unproject(g)}};return e.provide(Go,c),c}function Se(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(Go);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Cu=["Noto Sans Regular"],$u=12,vu="#0f172a",Su="#fff",Au=14;function Ne(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Lu(t){return t?Array.isArray(t)?t:[t]:Cu}function an(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Tu(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function Fu(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Mu(t,n={}){if(!t)return[];const o=Ne(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Tu(o);if(!r)return[];const l=r,a=(n.geometry||t.type||"point").toString().toLowerCase(),i=Ne(t,["text-font","textFont"]),s=an(Ne(t,["text-size","textSize"]),$u),f=Ne(t,["text-allow-overlap","textAllowOverlap"]),u=Ne(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),x=Ne(t,["text-maxzoom","textMaxZoom","maxzoom"]),c=Ne(t,["text-color","textColor"])||vu,g=Ne(t,["text-halo-color","textHaloColor"])||Su,d=Ne(t,["text-halo-width","textHaloWidth"]),y=Ne(t,["text-halo-blur","textHaloBlur"]),m=Ne(t,["text-offset","textOffset"]),h=Ne(t,["text-anchor","textAnchor"]),p=Ne(t,["text-justify","textJustify"]),_=Ne(t,["text-letter-spacing","textLetterSpacing"]),A=Ne(t,["text-transform","textTransform"]),F=Ne(t,["symbol-placement","symbolPlacement"]),D=Ne(t,["symbol-spacing","symbolSpacing"]),$=Ne(t,["text-rotation-alignment","textRotationAlignment"]),w=Ne(t,["text-pitch-alignment","textPitchAlignment"]),C=Ne(t,["text-opacity","textOpacity"]),E={"text-field":l,"text-font":Lu(i),"text-size":s,"text-allow-overlap":f??!1};m&&(E["text-offset"]=m),a!=="line"&&(E["text-anchor"]=h??"center"),p&&(E["text-justify"]=p),_!==void 0&&(E["text-letter-spacing"]=_),A&&(E["text-transform"]=A),D!==void 0&&(E["symbol-spacing"]=D),a==="line"?(E["symbol-placement"]=F||"line",E["text-rotation-alignment"]=$||"map",E["text-pitch-alignment"]=w||"map"):($&&(E["text-rotation-alignment"]=$),w&&(E["text-pitch-alignment"]=w),F&&(E["symbol-placement"]=F)),h&&a==="line"&&(E["text-anchor"]=h);const I={"text-color":c,"text-opacity":C??1};I["text-halo-color"]=g,d!==void 0&&(I["text-halo-width"]=d),y!==void 0&&(I["text-halo-blur"]=y);const q={type:"symbol",layout:E,paint:I},R=an(u,Au);if(q.minzoom=R,x!==void 0){const v=an(x,void 0);v!==void 0&&(q.maxzoom=v)}const M=Fu(n.filter,n.excludeClusters);return M&&(q.filter=M),[q]}const sn=new Map,cn={};function dn(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,pt]}return null}function Du(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.split("+")[0];return Object.values(t.colors).forEach(r=>{n.push(`${o}+${r.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((r,[l,a],i)=>r.concat([l,n[i]]),[]),t.icon]}function gt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function Iu(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],a=["has","point_count"],i=["!",a],u={type:"circle",maxzoom:r,filter:a,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},x={type:"symbol",maxzoom:r,filter:a,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},c={...n,filter:["all",i,n.filter||!0]};return[u,x,c]}function Ko(t,n){const o=dn(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const r={type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color||pt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=Iu(t,r);return l||r}function ju(t){const n=dn(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||pt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||pt}}}function zu(t){return{type:"line",paint:{"line-color":dn(t)||t.color||pt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Ou(t){const n=Du(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function Xo(t,n={}){if(!t)return[];if(!Pu(t))return[];const o=[];t.icon&&gt(o,Ou(t)),t.pointZoom&&gt(o,Ko(t,t.pointZoom)),t.type==="polygon"?gt(o,ju(t)):t.type==="line"?gt(o,zu(t)):gt(o,Ko(t));const l=n.sourceType!=="raster"?Mu(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return gt(o,l),o.filter(Boolean)}function Pu(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width):!1}function Jo(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let l=rn(t);if(l&&o&&(l.filter=o),l)return Xo(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const a={type:"point",color:pt};return o&&(a.filter=o),Xo(a,{sourceType:n})}return[]}function Ru(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function Qo(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(a=>{r.push(`${l}+${a.replace("#","")}.png`)});for(const a of r){if(t.getImage(a))continue;const i=await t.loadImage(`/api/gis-icon/${a}`);t.addImage(a,i.data)}}function ue(t,n,o){var R,M;if(!t)return cn;if(!n)return cn[t];const{map:r,ready:l=()=>Promise.resolve()}=Se(o),a=t||((R=n.layer)==null?void 0:R.id),i=n.sourceId??t,s={...n};s.point&&(s.source=Ru(s.point)),!s.layer&&((M=s.source)==null?void 0:M.type)==="raster"&&(s.layer={id:i,type:"raster",source:i}),s.layer&&!s.layer.source&&Object.assign(s.layer,{source:i});let f=!1,u=!1;const x=()=>{var v,b,k,N,B,T,L,j,U,Y;if(!(u||!r.value)){if(s.source&&!r.value.getSource(i)&&r.value.addSource(i,s.source),!r.value.getLayer(a)){const re=s.beforeId===0?(b=(v=r.value.getStyle().layers)==null?void 0:v[0])==null?void 0:b.id:s.beforeId;(N=(k=s.layer)==null?void 0:k.style)!=null&&N.icon&&Qo(r.value,s.layer.style.icon,s.layer.style.colors);const X=((B=s.source)==null?void 0:B.type)||((T=s.layer)==null?void 0:T.type),ee=s.layer&&(s.layer.type||s.layer.ref)?s.layer:null,fe=(L=s.layer)==null?void 0:L.style,pe=((j=s.layer)==null?void 0:j["source-layer"])||((U=s.source)==null?void 0:U["source-layer"])||s.sourceLayer||i,me=s.style||fe,P=Jo(me,{sourceType:X,filter:(Y=s.layer)==null?void 0:Y.filter,allowFallback:!ee});if(!P.length){if(ee){const H={...ee,id:ee.id||a,source:ee.source||i};X==="vector"&&pe&&(H["source-layer"]=H["source-layer"]||pe),r.value.addLayer(H,re)}return}P.forEach((H,W)=>{const te={...H,id:`${a}${W||""}`,source:i};X==="vector"&&pe&&(te["source-layer"]=pe),r.value.addLayer(te,re)})}f=!0}};l().then(x);const c=(v,b)=>r.value?(r.value.on(v,a,b),()=>{var k;return(k=r.value)==null?void 0:k.off(v,a,b)}):()=>{},g=v=>{const b=r.value;if(!b)return;const k=b.getStyle(),N=k==null?void 0:k.layers;N!=null&&N.length&&N.filter(B=>B.source===a).forEach(B=>{b.setLayoutProperty(B.id,"visibility",v?"visible":"none")})},d=(v=!0)=>{var k,N,B;if(!r.value)return;(((B=(N=(k=r.value).getStyle)==null?void 0:N.call(k))==null?void 0:B.layers)??[]).filter(T=>T.source===a).forEach(T=>{r.value.removeLayer(T.id)}),u=!0,s.source&&v&&r.value.getSource(i)&&r.value.removeSource(i)},y=async v=>{var B,T,L,j,U;if(!r.value)return;v!=null&&v.icon&&Qo(r.value,v.icon,v.colors);const b=((B=s.source)==null?void 0:B.type)||((T=s.layer)==null?void 0:T.type),k=((L=s.layer)==null?void 0:L["source-layer"])||((j=s.source)==null?void 0:j["source-layer"])||s.sourceLayer||i,N=Jo(v,{sourceType:b,filter:(U=s.layer)==null?void 0:U.filter,allowFallback:!0});d(!1),N.forEach((Y,re)=>{var ee;const X={...Y,id:`${a}${re}`,source:((ee=s.layer)==null?void 0:ee.source)||i};b==="vector"&&k&&(X["source-layer"]=X["source-layer"]||k),r.value.addLayer(X)})},m=v=>{r.value&&Object.entries(v).forEach(([b,k])=>{r.value.setPaintProperty(a,b,k)})},h=(v,b,k)=>{const N=r.value;if(N)switch(b){case"raster":N.setPaintProperty(v,"raster-opacity",k);break;case"fill":N.setPaintProperty(v,"fill-opacity",k);break;case"line":N.setPaintProperty(v,"line-opacity",k);break;case"circle":N.setPaintProperty(v,"circle-opacity",k);break;case"symbol":N.setPaintProperty(v,"icon-opacity",k),N.setPaintProperty(v,"text-opacity",k);break}},E={ids:{layerId:a,sourceId:i},isMounted:()=>{var v;return f&&!!((v=r.value)!=null&&v.getLayer(a))},setVisible:g,updatePaint:m,updateLayout:v=>{r.value&&Object.entries(v).forEach(([b,k])=>{r.value.setLayoutProperty(a,b,k)})},updateFilter:v=>{r.value&&r.value.setFilter(a,v)},setOpacity:v=>{var N;if(!r.value)return;const k=(((N=r.value.getStyle())==null?void 0:N.layers)||[]).filter(B=>B.source===i);if(!k.length){const B=r.value.getLayer(a);B&&h(a,B.type,v);return}k.forEach(B=>h(B.id,B.type,v))},setData:v=>{if(!r.value)return;const b=r.value.getSource(i);b&&"setData"in b&&b.setData(v)},setTiles:v=>{if(!r.value)return;const b=r.value.getSource(i);b&&"setTiles"in b&&b.setTiles(v)},setStyle:y,setFilter:v=>{var k,N;if(!r.value)return;const b=r.value.getSource(i);if(b&&"setTiles"in b&&((N=(k=s.source)==null?void 0:k.tiles)!=null&&N[0])){const B=s.source.tiles[0];b.setTiles([`${B}${B.includes("?")?"&":"?"}filter=${v}`])}},setFeatureState:(v,b)=>{r.value&&r.value.setFeatureState({source:i,...v},b)},removeFeatureState:(v,b)=>{r.value&&r.value.removeFeatureState({source:i,...v},b?{key:b}:void 0)},remove:d,card:s.card,popup:s.popup,opts:s,getSource:()=>{var v;return(v=r.value)==null?void 0:v.getSource(i)},getLayer:()=>{var v;return(v=r.value)==null?void 0:v.getLayer(a)},on:c};sn.set(a,E);const I=()=>{sn.get(a)===E&&sn.delete(a)},q=E.remove;return E.remove=()=>{I(),q()},e.onBeforeUnmount(E.remove),cn[t]=E,E}const Uu={class:"flex flex-col flex-1 min-h-0"},qu={class:"flex flex-col flex-1 min-h-0"},Hu=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>{const m=ue(o.token);m&&(m.popup=y),r("update:columns",y)});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),f=[{key:"name",label:"Назва",type:"main"}],u={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"text",label:"Data"}};function x(){s.value=l.value.map(y=>y.name||y.id),i.value=!0}function c(){var p;const y=[...l.value],m=((p=o.fields)==null?void 0:p.filter(_=>s.value.includes(_.name)))||[],h=at(y,m,{selectedKeys:s.value,resolveKey:_=>Ge(_)});l.value=h,i.value=!1,s.value=[]}function g(){i.value=!1,s.value=[]}function d(){let y=[];a.value==="all"?y=o.fields||[]:a.value==="none"?y=[]:y=l.value,y.filter(m=>!m.label).forEach(m=>m.label=m.ua),r("save",y)}return(y,m)=>(e.openBlock(),e.createElementBlock("div",Uu,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",qu,[a.value==="list"?(e.openBlock(),e.createBlock(Ze,{key:0,modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=h=>l.value=h),"columns-scheme":f,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(lt,{visible:i.value,"onUpdate:visible":m[1]||(m[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":m[2]||(m[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:c,onCancel:g},null,8,["visible","selection","fields"])]))}}),Wu={class:"flex flex-col flex-1 min-h-0"},Yu={class:"flex justify-between mb-3 gap-2"},Zu={class:"p-4 space-y-4 text-sm"},Gu={class:"space-y-1"},Ku={class:"space-y-1"},Xu={class:"flex items-center gap-3"},Ju={class:"flex justify-end gap-2 p-4 border-t"},Qu=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,y=>{l.value=y||[]}),e.watch(l,y=>{r("update:columns",y)});const a=e.ref(!1),i=e.ref({name:"",color:"#2E86DE"}),s=e.defineAsyncComponent(()=>import("@opengis/core").then(y=>y.VsModal)),f=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],u={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function x(y){y&&c(),a.value=y}function c(){i.value={name:"",color:"#2E86DE"}}function g(){var p,_;const y=(p=i.value.name)==null?void 0:p.trim();if(!y){ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const m=((_=i.value.color)==null?void 0:_.trim())||"#2E86DE";if(l.value.some(A=>Ge(A)===Ge({name:y}))){ce.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:y,color:m}],c(),a.value=!1}function d(){r("save",l.value)}return(y,m)=>(e.openBlock(),e.createElementBlock("div",Wu,[e.createElementVNode("div",Yu,[e.createElementVNode("button",{onClick:m[0]||(m[0]=h=>a.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Ze,{modelValue:l.value,"onUpdate:modelValue":m[1]||(m[1]=h=>l.value=h),"columns-scheme":f,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(s),{teleport:"#modal",visible:a.value,title:"Новий елемент легенди","onUpdate:visible":x},{footer:e.withCtx(()=>[e.createElementVNode("div",Ju,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:m[5]||(m[5]=h=>x(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:g}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",Zu,[e.createElementVNode("div",Gu,[m[6]||(m[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[2]||(m[2]=h=>i.value.name=h),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,i.value.name]])]),e.createElementVNode("div",Ku,[m[7]||(m[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Xu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[3]||(m[3]=h=>i.value.color=h),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,i.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[4]||(m[4]=h=>i.value.color=h),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,i.value.color]])])])])]),_:1},8,["visible"])]))}}),ep={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},tp=["onClick"],np=["aria-checked","value"],op={key:0},lp=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=i=>r("update:modelValue",i),a=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(i,s)=>(e.openBlock(),e.createElementBlock("div",ep,[s[1]||(s[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(a).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),f=>(e.openBlock(),e.createElementBlock("div",{key:f.value,onClick:u=>l(f.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===f.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===f.value,value:f.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===f.value?(e.openBlock(),e.createElementBlock("span",op,[...s[0]||(s[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,np),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===f.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(f.label),3)],10,tp))),128))],2)]))}}),rp={class:"flex flex-col flex-1 min-h-0"},ap={class:"flex flex-col flex-1 min-h-0"},ip=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,h=>l.value=h||[],{immediate:!0}),e.watch(l,h=>r("update:columns",h));const a=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,h=>{h&&h!==a.value&&(a.value=h)});const i=e.ref(o.html??"");e.watch(()=>o.html,h=>{typeof h=="string"&&h!==i.value&&(i.value=h)},{immediate:!0});const s=e.ref(!1),f=e.ref([]),u=[{key:"name",label:"Name",type:"main"}],x={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"text",label:"Data"}};function c(){f.value=a.value==="html"?[]:l.value.map(h=>h.name||h.id),s.value=!0}function g(){var A;const h=[...l.value],p=((A=o.fields)==null?void 0:A.filter(F=>f.value.includes(F.name)).map(F=>{const{type:D,format:$,...w}=F;return{...w,format:$??D??"text"}}))||[],_=at(h,p,{selectedKeys:f.value,resolveKey:F=>Ge(F)});if(l.value=_,a.value==="html"&&p.length){const F=p.map(w=>{const C=w.label??"",E=w.name??w.id??"";return`<dd>${C}</dd>
149
+ `:""}var Od=zd,Pd={dump:Od};function ln(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var Rd=ve,Ud=Hn,qd=Gn,Hd=eo,Wd=to,Yd=Gt,Ho=Bo.load,Zd=Bo.loadAll,Wo=Pd.dump,Gd=Me,Kd={binary:ao,float:Qn,map:Zn,null:Kn,pairs:so,set:co,timestamp:lo,bool:Xn,int:Jn,merge:ro,omap:io,seq:Yn,str:Wn},Xd=ln("safeLoad","load"),Jd=ln("safeLoadAll","loadAll"),Qd=ln("safeDump","dump"),Yo={Type:Rd,Schema:Ud,FAILSAFE_SCHEMA:qd,JSON_SCHEMA:Hd,CORE_SCHEMA:Wd,DEFAULT_SCHEMA:Yd,load:Ho,loadAll:Zd,dump:Wo,YAMLException:Gd,types:Kd,safeLoad:Xd,safeLoadAll:Jd,safeDump:Qd};const pt="#9ca3af";function rn(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const eu={},tu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-settings"};function nu(t,n){return e.openBlock(),e.createElementBlock("svg",tu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Zo=oe(eu,[["render",nu]]),ou={},lu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers"};function ru(t,n){return e.openBlock(),e.createElementBlock("svg",lu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"},null,-1),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"},null,-1),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"},null,-1)])])}const au=oe(ou,[["render",ru]]),iu={},su={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-eye"};function cu(t,n){return e.openBlock(),e.createElementBlock("svg",su,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const du=oe(iu,[["render",cu]]),uu={},pu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map"};function mu(t,n){return e.openBlock(),e.createElementBlock("svg",pu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"},null,-1),e.createElementVNode("path",{d:"M15 5.764v15"},null,-1),e.createElementVNode("path",{d:"M9 3.236v15"},null,-1)])])}const fu=oe(uu,[["render",mu]]),gu={},yu={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-filter"};function hu(t,n){return e.openBlock(),e.createElementBlock("svg",yu,[...n[0]||(n[0]=[e.createElementVNode("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"},null,-1)])])}const xu=oe(gu,[["render",hu]]),Dt=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(null);let a=null,i=null,s=!1;function f(){return new Promise((x,c)=>{if(i)return x(i);if(window.monaco)return i=window.monaco,x(i);const g=y=>{if([...document.styleSheets].some(h=>{var p;return(p=h==null?void 0:h.href)==null?void 0:p.includes(y)}))return;const m=document.createElement("link");m.rel="stylesheet",m.href=y,document.head.appendChild(m)},d=y=>new Promise((m,h)=>{const p=document.createElement("script");p.src=y,p.onload=()=>m(!0),p.onerror=h,document.body.appendChild(p)});g("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),d("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{i=window.monaco,x(i)})}).catch(c)})}function u(){var x,c;!l.value||!i||(a&&a.dispose(),a=i.editor.create(l.value,{value:o.modelValue||"",language:o.language||"yaml",theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1}}),(c=(x=i.languages)==null?void 0:x.css)!=null&&c.cssDefaults&&i.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),a.onDidChangeModelContent(()=>{s||r("update:modelValue",a.getValue())}))}return e.watch(()=>o.modelValue,x=>{if(!a)return;const c=a.getValue();x!==c&&(s=!0,a.setValue(x||""),s=!1)}),e.watch(()=>o.language,x=>{a&&i&&i.editor.setModelLanguage(a.getModel(),x||"yaml")}),e.watch(()=>o.theme,x=>{a&&i&&i.editor.setTheme(x||"vs-light")}),e.onMounted(async()=>{await f(),u()}),e.onBeforeUnmount(()=>{a&&a.dispose()}),(x,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),bu={class:"flex flex-col flex-1 overflow-hidden"},ku={class:"flex justify-end gap-2"},wu=["href"],_u={class:"flex flex-col flex-1 overflow-hidden"},Eu={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Nu={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Bu=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleText,f=>{const u=f??"";l.value!==u&&(l.value=u)},{immediate:!0}),e.watch(l,async f=>{var x,c;const u=f??"";o.styleText!==u&&r("update:style-text",u);try{const g=f?Ho(f):null;if((x=g==null?void 0:g.colorAttr)!=null&&x.length&&((c=o.styleYaml)==null?void 0:c.colorAttr)!==g.colorAttr){const d=await a(g.colorAttr);g.colors=d.reduce((m,h,p)=>({...m,[h.id.toString()]:i[p]}),{});const y=Wo(g);y!==l.value&&(l.value=y)}JSON.stringify(g)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",g&&typeof g=="object"?g:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function a(f){return(await fetch(`/api/gis-service/${o.token}/${f}`).then(x=>x.json())).rows}const i=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],s=async()=>{const f=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:f})}),r("update"),ce.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(u){ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(u)}};return(f,u)=>(e.openBlock(),e.createElementBlock("div",bu,[e.createElementVNode("div",ku,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,wu),e.createElementVNode("button",{onClick:s,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...u[1]||(u[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",_u,[e.createElementVNode("div",Eu,[u[2]||(u[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",Nu,[e.createVNode(Dt,{modelValue:l.value,"onUpdate:modelValue":u[0]||(u[0]=x=>l.value=x),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}});function mt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function ft(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=mt(t[0]),o=mt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return ft(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=mt(o),a=mt(r);if(l!=null&&a!=null)return[l,a]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=mt(n),l=mt(o);return r!=null&&l!=null?[r,l]:null}return null}const Go=Symbol("MapContext");function Vu(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],a=()=>{r=!0,l.length&&l.forEach(g=>g())},i=()=>{const g=t.container;return typeof g=="string"?document.getElementById(g):(g==null?void 0:g.value)!==void 0?g.value:g},s=()=>r?Promise.resolve():new Promise(g=>l.push(g)),f=(g,d)=>{if(g==null)return d;const y=Number(typeof g=="string"?g.trim():g);return Number.isFinite(y)?y:d},u=async()=>{var A,F,D,$,w,C,E;if(typeof window>"u"||n.value)return;const g=i();if(!g)throw new Error("Map container not found");const d=t.settings||null,y=ft((A=d==null?void 0:d.map)==null?void 0:A.center)||[30,50],m=f((F=d==null?void 0:d.map)==null?void 0:F.zoom,7),h=f((D=d==null?void 0:d.map)==null?void 0:D.maxZoom,20),_={...{attributionControl:!1,center:y,zoom:m,maxZoom:h,minZoom:4},...t.mapOptions||{},container:g};_.maxZoom==null&&(_.maxZoom=h),n.value=new maplibregl.Map(_),($=t.controls)!=null&&$.navigation&&n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),(w=t.controls)!=null&&w.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(C=t.controls)!=null&&C.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(E=t.controls)!=null&&E.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{o.value=!0,a()})},x=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(u),e.onUnmounted(x);const c={map:n,ready:s,flyTo:g=>{var d;return(d=n.value)==null?void 0:d.flyTo(g)},fitBounds:(g,d)=>{var y;return(y=n.value)==null?void 0:y.fitBounds(g,d)},setCenter:g=>{var d;return(d=n.value)==null?void 0:d.setCenter(g)},setZoom:g=>{var d;return(d=n.value)==null?void 0:d.setZoom(g)},addControl:(g,d)=>{var y;return(y=n.value)==null?void 0:y.addControl(g,d)},removeControl:g=>{var d;return(d=n.value)==null?void 0:d.removeControl(g)},on:(g,d,y)=>{var m,h;return typeof d=="string"?((m=n.value)==null||m.on(g,d,y),()=>{var p;return(p=n.value)==null?void 0:p.off(g,d,y)}):((h=n.value)==null||h.on(g,d),()=>{var p;return(p=n.value)==null?void 0:p.off(g,d)})},off:(g,d,y)=>{var m,h;typeof d=="string"?(m=n.value)==null||m.off(g,d,y):(h=n.value)==null||h.off(g,d)},project:g=>{var d;return(d=n.value)==null?void 0:d.project(g)},unproject:g=>{var d;return(d=n.value)==null?void 0:d.unproject(g)}};return e.provide(Go,c),c}function Se(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(Go);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Cu=["Noto Sans Regular"],$u=12,vu="#0f172a",Su="#fff",Au=14;function Ne(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Lu(t){return t?Array.isArray(t)?t:[t]:Cu}function an(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Tu(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function Fu(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Mu(t,n={}){if(!t)return[];const o=Ne(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Tu(o);if(!r)return[];const l=r,a=(n.geometry||t.type||"point").toString().toLowerCase(),i=Ne(t,["text-font","textFont"]),s=an(Ne(t,["text-size","textSize"]),$u),f=Ne(t,["text-allow-overlap","textAllowOverlap"]),u=Ne(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),x=Ne(t,["text-maxzoom","textMaxZoom","maxzoom"]),c=Ne(t,["text-color","textColor"])||vu,g=Ne(t,["text-halo-color","textHaloColor"])||Su,d=Ne(t,["text-halo-width","textHaloWidth"]),y=Ne(t,["text-halo-blur","textHaloBlur"]),m=Ne(t,["text-offset","textOffset"]),h=Ne(t,["text-anchor","textAnchor"]),p=Ne(t,["text-justify","textJustify"]),_=Ne(t,["text-letter-spacing","textLetterSpacing"]),A=Ne(t,["text-transform","textTransform"]),F=Ne(t,["symbol-placement","symbolPlacement"]),D=Ne(t,["symbol-spacing","symbolSpacing"]),$=Ne(t,["text-rotation-alignment","textRotationAlignment"]),w=Ne(t,["text-pitch-alignment","textPitchAlignment"]),C=Ne(t,["text-opacity","textOpacity"]),E={"text-field":l,"text-font":Lu(i),"text-size":s,"text-allow-overlap":f??!1};m&&(E["text-offset"]=m),a!=="line"&&(E["text-anchor"]=h??"center"),p&&(E["text-justify"]=p),_!==void 0&&(E["text-letter-spacing"]=_),A&&(E["text-transform"]=A),D!==void 0&&(E["symbol-spacing"]=D),a==="line"?(E["symbol-placement"]=F||"line",E["text-rotation-alignment"]=$||"map",E["text-pitch-alignment"]=w||"map"):($&&(E["text-rotation-alignment"]=$),w&&(E["text-pitch-alignment"]=w),F&&(E["symbol-placement"]=F)),h&&a==="line"&&(E["text-anchor"]=h);const I={"text-color":c,"text-opacity":C??1};I["text-halo-color"]=g,d!==void 0&&(I["text-halo-width"]=d),y!==void 0&&(I["text-halo-blur"]=y);const q={type:"symbol",layout:E,paint:I},R=an(u,Au);if(q.minzoom=R,x!==void 0){const v=an(x,void 0);v!==void 0&&(q.maxzoom=v)}const M=Fu(n.filter,n.excludeClusters);return M&&(q.filter=M),[q]}const sn=new Map,cn={};function dn(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,pt]}return null}function Du(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.split("+")[0];return Object.values(t.colors).forEach(r=>{n.push(`${o}+${r.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((r,[l,a],i)=>r.concat([l,n[i]]),[]),t.icon]}function gt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function Iu(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],a=["has","point_count"],i=["!",a],u={type:"circle",maxzoom:r,filter:a,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},x={type:"symbol",maxzoom:r,filter:a,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},c={...n,filter:["all",i,n.filter||!0]};return[u,x,c]}function Ko(t,n){const o=dn(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const r={type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color||pt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=Iu(t,r);return l||r}function ju(t){const n=dn(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||pt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||pt}}}function zu(t){return{type:"line",paint:{"line-color":dn(t)||t.color||pt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Ou(t){const n=Du(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function Xo(t,n={}){if(!t)return[];if(!Pu(t))return[];const o=[];t.icon&&gt(o,Ou(t)),t.pointZoom&&gt(o,Ko(t,t.pointZoom)),t.type==="polygon"?gt(o,ju(t)):t.type==="line"?gt(o,zu(t)):gt(o,Ko(t));const l=n.sourceType!=="raster"?Mu(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return gt(o,l),o.filter(Boolean)}function Pu(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width||t.colorAttr&&t.colors&&typeof t.colors=="object"&&Object.keys(t.colors).length>0):!1}function Jo(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let l=rn(t);if(l&&o&&(l.filter=o),l)return Xo(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const a={type:"point",color:pt};return o&&(a.filter=o),Xo(a,{sourceType:n})}return[]}function Ru(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function Qo(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(a=>{r.push(`${l}+${a.replace("#","")}.png`)});for(const a of r){if(t.getImage(a))continue;const i=await t.loadImage(`/api/gis-icon/${a}`);t.addImage(a,i.data)}}function ue(t,n,o){var R,M;if(!t)return cn;if(!n)return cn[t];const{map:r,ready:l=()=>Promise.resolve()}=Se(o),a=t||((R=n.layer)==null?void 0:R.id),i=n.sourceId??t,s={...n};s.point&&(s.source=Ru(s.point)),!s.layer&&((M=s.source)==null?void 0:M.type)==="raster"&&(s.layer={id:i,type:"raster",source:i}),s.layer&&!s.layer.source&&Object.assign(s.layer,{source:i});let f=!1,u=!1;const x=()=>{var v,b,k,N,B,T,L,j,U,Y;if(!(u||!r.value)){if(s.source&&!r.value.getSource(i)&&r.value.addSource(i,s.source),!r.value.getLayer(a)){const re=s.beforeId===0?(b=(v=r.value.getStyle().layers)==null?void 0:v[0])==null?void 0:b.id:s.beforeId;(N=(k=s.layer)==null?void 0:k.style)!=null&&N.icon&&Qo(r.value,s.layer.style.icon,s.layer.style.colors);const X=((B=s.source)==null?void 0:B.type)||((T=s.layer)==null?void 0:T.type),ee=s.layer&&(s.layer.type||s.layer.ref)?s.layer:null,fe=(L=s.layer)==null?void 0:L.style,pe=((j=s.layer)==null?void 0:j["source-layer"])||((U=s.source)==null?void 0:U["source-layer"])||s.sourceLayer||i,me=s.style||fe,P=Jo(me,{sourceType:X,filter:(Y=s.layer)==null?void 0:Y.filter,allowFallback:!ee});if(!P.length){if(ee){const H={...ee,id:ee.id||a,source:ee.source||i};X==="vector"&&pe&&(H["source-layer"]=H["source-layer"]||pe),r.value.addLayer(H,re)}return}P.forEach((H,W)=>{const te={...H,id:`${a}${W||""}`,source:i};X==="vector"&&pe&&(te["source-layer"]=pe),r.value.addLayer(te,re)})}f=!0}};l().then(x);const c=(v,b)=>r.value?(r.value.on(v,a,b),()=>{var k;return(k=r.value)==null?void 0:k.off(v,a,b)}):()=>{},g=v=>{const b=r.value;if(!b)return;const k=b.getStyle(),N=k==null?void 0:k.layers;N!=null&&N.length&&N.filter(B=>B.source===a).forEach(B=>{b.setLayoutProperty(B.id,"visibility",v?"visible":"none")})},d=(v=!0)=>{var k,N,B;if(!r.value)return;(((B=(N=(k=r.value).getStyle)==null?void 0:N.call(k))==null?void 0:B.layers)??[]).filter(T=>T.source===a).forEach(T=>{r.value.removeLayer(T.id)}),u=!0,s.source&&v&&r.value.getSource(i)&&r.value.removeSource(i)},y=async v=>{var B,T,L,j,U;if(!r.value)return;v!=null&&v.icon&&Qo(r.value,v.icon,v.colors);const b=((B=s.source)==null?void 0:B.type)||((T=s.layer)==null?void 0:T.type),k=((L=s.layer)==null?void 0:L["source-layer"])||((j=s.source)==null?void 0:j["source-layer"])||s.sourceLayer||i,N=Jo(v,{sourceType:b,filter:(U=s.layer)==null?void 0:U.filter,allowFallback:!0});d(!1),N.forEach((Y,re)=>{var ee;const X={...Y,id:`${a}${re}`,source:((ee=s.layer)==null?void 0:ee.source)||i};b==="vector"&&k&&(X["source-layer"]=X["source-layer"]||k),r.value.addLayer(X)})},m=v=>{r.value&&Object.entries(v).forEach(([b,k])=>{r.value.setPaintProperty(a,b,k)})},h=(v,b,k)=>{const N=r.value;if(N)switch(b){case"raster":N.setPaintProperty(v,"raster-opacity",k);break;case"fill":N.setPaintProperty(v,"fill-opacity",k);break;case"line":N.setPaintProperty(v,"line-opacity",k);break;case"circle":N.setPaintProperty(v,"circle-opacity",k);break;case"symbol":N.setPaintProperty(v,"icon-opacity",k),N.setPaintProperty(v,"text-opacity",k);break}},E={ids:{layerId:a,sourceId:i},isMounted:()=>{var v;return f&&!!((v=r.value)!=null&&v.getLayer(a))},setVisible:g,updatePaint:m,updateLayout:v=>{r.value&&Object.entries(v).forEach(([b,k])=>{r.value.setLayoutProperty(a,b,k)})},updateFilter:v=>{r.value&&r.value.setFilter(a,v)},setOpacity:v=>{var N;if(!r.value)return;const k=(((N=r.value.getStyle())==null?void 0:N.layers)||[]).filter(B=>B.source===i);if(!k.length){const B=r.value.getLayer(a);B&&h(a,B.type,v);return}k.forEach(B=>h(B.id,B.type,v))},setData:v=>{if(!r.value)return;const b=r.value.getSource(i);b&&"setData"in b&&b.setData(v)},setTiles:v=>{if(!r.value)return;const b=r.value.getSource(i);b&&"setTiles"in b&&b.setTiles(v)},setStyle:y,setFilter:v=>{var k,N;if(!r.value)return;const b=r.value.getSource(i);if(b&&"setTiles"in b&&((N=(k=s.source)==null?void 0:k.tiles)!=null&&N[0])){const B=s.source.tiles[0];b.setTiles([`${B}${B.includes("?")?"&":"?"}filter=${v}`])}},setFeatureState:(v,b)=>{r.value&&r.value.setFeatureState({source:i,...v},b)},removeFeatureState:(v,b)=>{r.value&&r.value.removeFeatureState({source:i,...v},b?{key:b}:void 0)},remove:d,card:s.card,popup:s.popup,opts:s,getSource:()=>{var v;return(v=r.value)==null?void 0:v.getSource(i)},getLayer:()=>{var v;return(v=r.value)==null?void 0:v.getLayer(a)},on:c};sn.set(a,E);const I=()=>{sn.get(a)===E&&sn.delete(a)},q=E.remove;return E.remove=()=>{I(),q()},e.onBeforeUnmount(E.remove),cn[t]=E,E}const Uu={class:"flex flex-col flex-1 min-h-0"},qu={class:"flex flex-col flex-1 min-h-0"},Hu=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>{const m=ue(o.token);m&&(m.popup=y),r("update:columns",y)});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),f=[{key:"name",label:"Назва",type:"main"}],u={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"text",label:"Data"}};function x(){s.value=l.value.map(y=>y.name||y.id),i.value=!0}function c(){var p;const y=[...l.value],m=((p=o.fields)==null?void 0:p.filter(_=>s.value.includes(_.name)))||[],h=at(y,m,{selectedKeys:s.value,resolveKey:_=>Ge(_)});l.value=h,i.value=!1,s.value=[]}function g(){i.value=!1,s.value=[]}function d(){let y=[];a.value==="all"?y=o.fields||[]:a.value==="none"?y=[]:y=l.value,y.filter(m=>!m.label).forEach(m=>m.label=m.ua),r("save",y)}return(y,m)=>(e.openBlock(),e.createElementBlock("div",Uu,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",qu,[a.value==="list"?(e.openBlock(),e.createBlock(Ze,{key:0,modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=h=>l.value=h),"columns-scheme":f,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(lt,{visible:i.value,"onUpdate:visible":m[1]||(m[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":m[2]||(m[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:c,onCancel:g},null,8,["visible","selection","fields"])]))}}),Wu={class:"flex flex-col flex-1 min-h-0"},Yu={class:"flex justify-between mb-3 gap-2"},Zu={class:"p-4 space-y-4 text-sm"},Gu={class:"space-y-1"},Ku={class:"space-y-1"},Xu={class:"flex items-center gap-3"},Ju={class:"flex justify-end gap-2 p-4 border-t"},Qu=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,y=>{l.value=y||[]}),e.watch(l,y=>{r("update:columns",y)});const a=e.ref(!1),i=e.ref({name:"",color:"#2E86DE"}),s=e.defineAsyncComponent(()=>import("@opengis/core").then(y=>y.VsModal)),f=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],u={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function x(y){y&&c(),a.value=y}function c(){i.value={name:"",color:"#2E86DE"}}function g(){var p,_;const y=(p=i.value.name)==null?void 0:p.trim();if(!y){ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const m=((_=i.value.color)==null?void 0:_.trim())||"#2E86DE";if(l.value.some(A=>Ge(A)===Ge({name:y}))){ce.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:y,color:m}],c(),a.value=!1}function d(){r("save",l.value)}return(y,m)=>(e.openBlock(),e.createElementBlock("div",Wu,[e.createElementVNode("div",Yu,[e.createElementVNode("button",{onClick:m[0]||(m[0]=h=>a.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Ze,{modelValue:l.value,"onUpdate:modelValue":m[1]||(m[1]=h=>l.value=h),"columns-scheme":f,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(s),{teleport:"#modal",visible:a.value,title:"Новий елемент легенди","onUpdate:visible":x},{footer:e.withCtx(()=>[e.createElementVNode("div",Ju,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:m[5]||(m[5]=h=>x(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:g}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",Zu,[e.createElementVNode("div",Gu,[m[6]||(m[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[2]||(m[2]=h=>i.value.name=h),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,i.value.name]])]),e.createElementVNode("div",Ku,[m[7]||(m[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Xu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[3]||(m[3]=h=>i.value.color=h),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,i.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[4]||(m[4]=h=>i.value.color=h),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,i.value.color]])])])])]),_:1},8,["visible"])]))}}),ep={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},tp=["onClick"],np=["aria-checked","value"],op={key:0},lp=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=i=>r("update:modelValue",i),a=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(i,s)=>(e.openBlock(),e.createElementBlock("div",ep,[s[1]||(s[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(a).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),f=>(e.openBlock(),e.createElementBlock("div",{key:f.value,onClick:u=>l(f.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===f.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===f.value,value:f.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===f.value?(e.openBlock(),e.createElementBlock("span",op,[...s[0]||(s[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,np),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===f.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(f.label),3)],10,tp))),128))],2)]))}}),rp={class:"flex flex-col flex-1 min-h-0"},ap={class:"flex flex-col flex-1 min-h-0"},ip=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,h=>l.value=h||[],{immediate:!0}),e.watch(l,h=>r("update:columns",h));const a=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,h=>{h&&h!==a.value&&(a.value=h)});const i=e.ref(o.html??"");e.watch(()=>o.html,h=>{typeof h=="string"&&h!==i.value&&(i.value=h)},{immediate:!0});const s=e.ref(!1),f=e.ref([]),u=[{key:"name",label:"Name",type:"main"}],x={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"text",label:"Data"}};function c(){f.value=a.value==="html"?[]:l.value.map(h=>h.name||h.id),s.value=!0}function g(){var A;const h=[...l.value],p=((A=o.fields)==null?void 0:A.filter(F=>f.value.includes(F.name)).map(F=>{const{type:D,format:$,...w}=F;return{...w,format:$??D??"text"}}))||[],_=at(h,p,{selectedKeys:f.value,resolveKey:F=>Ge(F)});if(l.value=_,a.value==="html"&&p.length){const F=p.map(w=>{const C=w.label??"",E=w.name??w.id??"";return`<dd>${C}</dd>
150
150
  <dt>{{ ${E} }}</dt>`}).join(`
151
151
  `),$=(i.value??"").trimEnd();i.value=$?`${$}
152
152
  ${F}`:F}s.value=!1,f.value=[]}function d(){s.value=!1,f.value=[]}function y(){const h=a.value==="html"?"html":"list",p={card_mode:h};h==="html"?p.html=i.value:h==="list"&&(p.list=l.value),r("save","card",p)}const m=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,p)=>(e.openBlock(),e.createElementBlock("div",rp,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(lp,{modelValue:a.value,"onUpdate:modelValue":p[0]||(p[0]=_=>a.value=_),options:m},null,8,["modelValue"]),e.createElementVNode("div",ap,[a.value==="list"?(e.openBlock(),e.createBlock(Ze,{key:0,modelValue:l.value,"onUpdate:modelValue":p[1]||(p[1]=_=>l.value=_),"columns-scheme":u,"form-scheme":x,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):a.value==="html"?(e.openBlock(),e.createBlock(Dt,{key:1,modelValue:i.value,"onUpdate:modelValue":p[2]||(p[2]=_=>i.value=_),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(lt,{visible:s.value,"onUpdate:visible":p[3]||(p[3]=_=>s.value=_),selection:f.value,"onUpdate:selection":p[4]||(p[4]=_=>f.value=_),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:g,onCancel:d},null,8,["visible","selection","fields"])]))}}),sp={class:"flex flex-col flex-1 min-h-0"},cp=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const l=e.ref(o.columns||[]);e.watch(()=>o.columns,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>r("update:columns",y),{deep:!0,immediate:!0});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),f=[{key:"id",label:"Name"},{key:"label",label:"UA"}],u={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function x(){s.value=l.value.map(y=>y.name||y.id),i.value=!0}function c(){var p;const y=[...l.value],m=((p=o.fields)==null?void 0:p.filter(_=>s.value.includes(_.name)))||[],h=at(y,m,{selectedKeys:s.value,resolveKey:_=>Ge(_)});l.value=h,i.value=!1,s.value=[]}function g(){i.value=!1,s.value=[]}function d(){let y=[];a.value==="all"?y=o.fields||[]:a.value==="none"?y=[]:y=l.value,r("save",y)}return(y,m)=>(e.openBlock(),e.createElementBlock("div",sp,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),a.value==="list"?(e.openBlock(),e.createBlock(Ze,{key:0,modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=h=>l.value=h),"columns-scheme":f,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(lt,{visible:i.value,"onUpdate:visible":m[1]||(m[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":m[2]||(m[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:c,onCancel:g},null,8,["visible","selection","fields"])]))}}),It=e.defineComponent({__name:"MapView",setup(t,{expose:n}){var u,x;const o=e.ref(null),r=e.ref(null),l=((x=(u=e.getCurrentInstance())==null?void 0:u.appContext.config.globalProperties)==null?void 0:x.$settings)||null,a=Vu({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1},controls:{navigation:!0,scale:!0},settings:l});async function i(){var g;await e.nextTick();const c=(g=a.map)==null?void 0:g.value;c!=null&&c.resize&&c.resize()}function s(){typeof ResizeObserver>"u"||r.value||!o.value||(r.value=new ResizeObserver(()=>{i()}),r.value.observe(o.value))}function f(){var c;(c=r.value)==null||c.disconnect(),r.value=null}return e.onMounted(()=>{i(),s(),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",i),f()}),n({ctx:a}),(c,g)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(c.$slots,"default")],512))}}),dp=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{}},setup(t,{expose:n}){var y,m,h,p;const{map:o,flyTo:r,setZoom:l}=Se(),a=((m=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:m.$settings)||null,i=t,s=i.id;String(i.id);const f=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,u=ue(s,{source:{type:"vector",tiles:[f],minzoom:0,maxzoom:14},popup:i.layer.popup,layer:{style:(h=i.layer)==null?void 0:h.style}});n({layerHandle:u}),r({center:i.layer.center||((p=a==null?void 0:a.map)==null?void 0:p.center)||[30,50],animate:!1});let x=null;function c(){if(!(u!=null&&u.setTiles))return;const _=f.includes("?")?"&":"?",A=`${f}${_}_=${Date.now()}`;u.setTiles([A])}function g(){x&&clearTimeout(x),x=setTimeout(()=>{x=null,d().catch(_=>console.error("Failed to update map layer",_))},300)}async function d(){o.value&&(c(),u.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,g,{deep:!0}),e.onBeforeUnmount(()=>{u.remove()}),(_,A)=>null}}),Et=e.ref(null);function up(){Et.value=null}function pp(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(Et,i=>{i!==o()&&n.value&&(n.value=!1)});function r(){Et.value=o(),n.value=!0}function l(){Et.value===o()&&(Et.value=null),n.value=!1}function a(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:a}}const mp={class:"map-filter"},fp={class:"map-filter__header"},gp={class:"map-filter__title"},yp={"aria-hidden":"true"},un="#map-filter-popover-host",jt=oe(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var L;return((L=o.layer)==null?void 0:L.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:a,close:i,toggle:s}=pp(l),f=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),u=e.ref(null),x=e.ref(null);let c=null;const g=e.ref({}),d=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),y=e.computed(()=>a.value),m=e.computed(()=>{var L;return Array.isArray((L=o.layer)==null?void 0:L.filters)?o.layer.filters:[]}),h=e.computed(()=>m.value.length>0),p=e.computed(()=>{var L;return((L=o.layer)==null?void 0:L.name)??""}),_=e.computed(()=>m.value),A=e.ref(null),F=e.computed(()=>m.value.length),D=e.computed(()=>F.value<=2),$=e.computed(()=>D.value?"body":typeof window>"u"||A.value?un:"body"),w=e.computed(()=>{if(!y.value||!D.value)return{};const L=typeof window<"u"?window.innerWidth:280,U=Math.max(280,L-16*2);return{position:"absolute",top:`${f.top}px`,left:`${f.left}px`,transform:f.transform,zIndex:1e3,width:"280px",maxWidth:`${U}px`}});function C(){i()}function E(L,j,U=8){const Y=window.scrollY+U,re=window.scrollY+window.innerHeight-U;let X=L;return X+j>re&&(X=re-j),X<Y&&(X=Y),X}function I(){var fe,pe,me;if(!u.value||!D.value)return;const L=u.value.getBoundingClientRect(),j=window.scrollX+8,U=window.scrollX+window.innerWidth-8,Y=((fe=x.value)==null?void 0:fe.offsetWidth)||280,re=((pe=x.value)==null?void 0:pe.offsetHeight)||0;let X=0,ee=0;if((me=o.catalogAnchor)!=null&&me.value){const P=o.catalogAnchor.value.getBoundingClientRect(),H=P.top+window.scrollY;X=E(H,re,8);const W=P.right+window.scrollX+12,te=U-Y,le=j;ee=Math.min(Math.max(W,le),Math.max(le,te))}else{const P=L.bottom+window.scrollY+8;X=E(P,re,8);let H=L.left+window.scrollX;H<j&&(H=j),H+Y>U&&(H=Math.max(j,U-Y)),ee=H}f.left=ee,f.top=X,f.transform="none"}function q(){D.value||T(),s(),a.value&&D.value&&e.nextTick(()=>{I(),N(),requestAnimationFrame(()=>I())})}function R(){o.disabled||q()}e.watch(y,L=>{L&&D.value?e.nextTick(()=>{I(),N(),requestAnimationFrame(()=>I())}):(B(),D.value||T())}),e.watch(_,()=>{!y.value||!D.value||e.nextTick(()=>I())},{deep:!0}),e.watch(D,L=>{y.value&&(L?e.nextTick(()=>{I(),N()}):(B(),T()))}),e.watch(()=>o.disabled,L=>{L&&(i(),g.value={})});function M(){!y.value||!D.value||I()}function v(L){const j=r.value;if(!j)return;const U=ue(j);if(!(U!=null&&U.setFilter))return;g.value=L;const Y=Object.entries(L).map(([re,X])=>`${re}=${X}`).join("|");U.setFilter(Y)}function b(L){if(!o.disabled)return;const j=L.currentTarget;if(!j)return;const U=j.getBoundingClientRect();d.left=U.left+U.width/2+window.scrollX,d.top=U.bottom+8+window.scrollY,d.visible=!0}function k(){d.visible=!1}e.onMounted(()=>{T(),window.addEventListener("resize",M),window.addEventListener("scroll",M,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",M),window.removeEventListener("scroll",M,!0),B()});function N(){B(),!(!x.value||!D.value)&&(c=new ResizeObserver(()=>{!y.value||!D.value||I()}),c.observe(x.value))}function B(){c&&(c.disconnect(),c=null)}function T(){typeof window>"u"||typeof document>"u"||(A.value=document.querySelector(un))}return(L,j)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:u},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(R,["prevent","stop"]),onMouseenter:b,onMouseleave:k,onFocus:b,onBlur:k},[...j[2]||(j[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),y.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:$.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!D.value}]),style:e.normalizeStyle(w.value),ref_key:"panel",ref:x,onClick:j[1]||(j[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",mp,[e.createElementVNode("div",fp,[e.createElementVNode("h3",gp,e.toDisplayString(p.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:C},[e.createElementVNode("span",yp,[e.createVNode(e.unref(yt),{class:"h-4 w-4"})]),j[3]||(j[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:_.value,value:g.value,limit:10,onChange:j[0]||(j[0]=U=>v(U.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-cc1f0579"]]),hp={key:0,class:"flex justify-center items-center h-[40px] w-[40px] bg-white text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full"},pn=oe(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",null,[t.filters.length>0?(e.openBlock(),e.createElementBlock("div",hp,[e.createVNode(jt,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),xp={class:"flex flex-row gap-x-3 z-10 relative widget"},bp=["onClick"],kp=["src","alt"],Nt=e.defineComponent({__name:"BaseMaps",setup(t){var d,y,m;const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o={z:13,x:4790,y:2762};function r(h){if(h)return h.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function l(h,p){let _=h||`layers-${Object.keys(p).length}`,A=1;for(;p[_];)_=`${h}-${A}`,A+=1;return _}const a=e.getCurrentInstance(),i=(d=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:d.$settings,s=i==null?void 0:i.map,f=e.computed(()=>{const h=Array.isArray(s==null?void 0:s.basemaps)?s==null?void 0:s.basemaps:[];if(!h.length)return{};const p={};return h.forEach((_,A)=>{const F=_.name??_.title??`basemap-${A}`,D=(_.id??F??`basemap-${A}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),$=l(D||`basemap-${A}`,p),w=_.preview||(_.url?r(_.url):void 0);p[$]={url:_.url,preview:w,title:F}}),p}),u=e.computed(()=>{const h=f.value;return Object.keys(h).length?h:n}),x=e.ref(Object.keys(u.value)[0]??"gki"),c=ue("base",{source:{type:"raster",tiles:(y=u.value[x.value])!=null&&y.url?[(m=u.value[x.value])==null?void 0:m.url]:[]},beforeId:0});function g(h){if(!u.value[h])return;x.value=h;const p=u.value[h];if(!(p!=null&&p.url)){c.setVisible(!1);return}c.setVisible(!0),c.setTiles([p.url])}return e.watch(()=>u.value,h=>{h[x.value]||(x.value=Object.keys(h)[0]??x.value);const p=h[x.value];p!=null&&p.url?(c.setVisible(!0),c.setTiles([p.url])):c.setVisible(!1)},{immediate:!0}),(h,p)=>(e.openBlock(),e.createElementBlock("div",xp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(_,A)=>(e.openBlock(),e.createElementBlock("div",{key:A,onClick:F=>g(A)},[A!=="none"&&_.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",x.value===A?"border-blue-500":"border-gray-200"])},[_.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:_.preview,alt:_.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,kp)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",x.value===A?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(Ll),{class:"w-4 h-4 text-gray-500"})],2))],8,bp))),128))]))}}),wp={key:0,class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",style:{width:"100%"}},_p={class:"flex flex-col gap-1 p-5"},Ep={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},mn=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Se(),l=e.ref([]);let a=null;function i(x){return x?x.map((c,g)=>{var m;const d=(c==null?void 0:c.name)||(c==null?void 0:c.label)||(c==null?void 0:c.title)||(c==null?void 0:c.id)||`Layer ${g+1}`,y=(c==null?void 0:c.color)||(c==null?void 0:c.fill)||((m=c==null?void 0:c.paint)==null?void 0:m.color)||"#3388ff";return{id:`${d}-${g}`,label:d,color:y}}):[]}function s(x){return x!=null&&x.layers?x.layers.filter(c=>{const g=c.paint||{};return g["fill-color"]||g["line-color"]||g["circle-color"]}).map((c,g)=>{var m;const d=c.paint||{},y=d["fill-color"]||d["line-color"]||d["circle-color"]||"#3388ff";return{id:c.id||`layer-${g}`,label:((m=c.metadata)==null?void 0:m.title)||c.id||`Layer ${g+1}`,color:y}}):[]}async function f(){var g;await r();const x=o.value;if(!x)return;const c=(g=x.getStyle)==null?void 0:g.call(x);l.value=s(c)}function u(){o.value&&(a==null||a())}return e.watch(()=>n.items,async x=>{x!=null?(l.value=i(x),a==null||a()):(await r(),u(),f())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),u(),f())}),e.onBeforeUnmount(()=>{a==null||a(),a=null}),(x,c)=>l.value.length?(e.openBlock(),e.createElementBlock("div",wp,[e.createElementVNode("div",_p,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:g.color})},null,4),e.createElementVNode("span",Ep,[e.createElementVNode("span",null,e.toDisplayString(g.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function Np(){const{map:t,ready:n}=Se(),o=e.ref(null),r=e.ref(null),l=e.ref(null),a=e.ref(null);let i=[];function s(){i.forEach(d=>d()),i=[]}const f=d=>{const y=(d==null?void 0:d.properties)||{};return!!(y.cluster||y.point_count||y.point_count_abbreviated)},u=d=>{var p,_;o.value=[d.point.x,d.point.y];const y=t.value.queryRenderedFeatures(d.point);if(!(y!=null&&y.length)){x();return}const m=y.find(A=>!f(A));if(!m){x();return}const h=ue(m.source)||ue((p=m.layer)==null?void 0:p.id);h!=null&&h.popup&&(r.value=((_=h.popup)==null?void 0:_.fields)||h.popup,a.value=m.properties)},x=()=>{r.value=null,a.value=null,o.value=null};async function c(){await n(),t.value&&(s(),t.value.on("mousemove",u),t.value.on("mouseleave",x))}function g(){s(),r.value=null,a.value=null,o.value=null}return n().then(c),{popupCoords:o,popupFields:r,popupValues:a,disable:g,title:l}}const Bp={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Vp={class:"space-y-1.5"},Cp={class:"font-bold text-slate-700"},$p={class:"text-slate-700"},el=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=Np(),{map:a}=Se(),i=e.ref(null),s=e.ref({left:"-9999px",top:"-9999px"}),f=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function u(m,h){if(h==null||h==="")return h;if((m==null?void 0:m.type)==="number"){const p=typeof h=="number"?h:Number(h);if(Number.isFinite(p))return f.format(p)}return h}function x(m,h,p){const _=m.name||m.label||m.title||`field-${p}`,A=m.label||m.title||m.name||_,F=m.name?h[m.name]:void 0,$=(m.name?h[`${m.name}_text`]:void 0)??F??m.value??null;return{key:_,label:A,value:u(m,$)}}const c=e.computed(()=>{const m=o.value||[],h=r.value||{};return m.filter(p=>(p==null?void 0:p.meta)!=="title").map((p,_)=>x(p,h,_)).filter(p=>p.label)}),g=e.computed(()=>{const m=o.value||[],h=r.value||{},p=m.find(_=>(_==null?void 0:_.meta)==="title");return p?x(p,h,0):null}),d=e.computed(()=>{var h;const m=c.value;return(h=g.value)!=null&&h.value?[{...g.value,key:`${g.value.key}-title`,label:"Назва"},...m]:m});function y(){var B,T;if(!d.value.length||!n.value||!i.value){s.value={left:"-9999px",top:"-9999px"};return}const m=i.value,h=m.offsetParent||null,p=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},_=((T=(B=a.value)==null?void 0:B.getContainer)==null?void 0:T.call(B))||void 0,A=(_==null?void 0:_.getBoundingClientRect())??p,F=A.left-p.left,D=A.top-p.top,$=m.offsetWidth||0,w=m.offsetHeight||0,C=12,E=8,[I,q]=n.value;let R=F+I+C,M=D+q+C;R+$+E>p.width&&(R=F+I-$-C),M+w+E>p.height&&(M=D+q-w-C);const v=E,b=E,k=Math.max(E,p.width-$-E),N=Math.max(E,p.height-w-E);R=Math.min(Math.max(R,v),k),M=Math.min(Math.max(M,b),N),s.value={left:`${R}px`,top:`${M}px`}}return e.watch([n,d],()=>{e.nextTick(()=>y())}),e.onMounted(()=>{window.addEventListener("resize",y)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",y),l()}),(m,h)=>d.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(s.value)},[e.createElementVNode("div",Bp,[e.createElementVNode("div",Vp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.key,class:"flex flex-col"},[e.createElementVNode("span",Cp,e.toDisplayString(p.label),1),e.createElementVNode("span",$p,e.toDisplayString(p.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function vp(){const{map:t,ready:n}=Se(),o=he.useRoute(),r=he.useRouter(),l=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(!1),f=e.ref([]),u=e.ref(0),x=e.computed(()=>f.value.length),c=e.computed(()=>s.value||!!l.value||!!i.value);let g=null,d=!1;function y(){l.value=null,a.value=null,i.value=null,s.value=!1,f.value=[],u.value=0}function m(){if(g){try{g()}catch{}g=null}}async function h(){await n();const R=t.value;R&&(m(),y(),R.on("click",p),g=()=>R.off("click",p),q(C()))}function p(R){const M=t.value;if(!M)return;const v=(M.queryRenderedFeatures(R.point)||[]).filter(b=>{var k;return(k=b==null?void 0:b.properties)==null?void 0:k.id});if(!v.length){y(),I(null);return}f.value=v,u.value=0,_(u.value)}function _(R){const M=f.value[R];if(!M)return;u.value=R;const v=ue(M.source);D(M,v==null?void 0:v.card)}function A(){u.value>=f.value.length-1||_(u.value+1)}function F(){u.value<=0||_(u.value-1)}async function D(R,M){var k,N,B,T;if(!((k=R==null?void 0:R.properties)!=null&&k.id))return;const v=new URLSearchParams;v.set("layer",R.source),v.set("id",String((N=R.properties)==null?void 0:N.id));const b=Array.isArray(M)&&M.length>0;s.value=b,i.value=null,l.value=null,a.value=R||null;try{const L=await fetch(`/api/map-format?${v.toString()}`);if(!L.ok)throw new Error(`Failed (${L.status})`);const j=await L.json(),U=Array.isArray(j.columns)?j.columns:[],Y=Array.isArray(M)?M:[];if(!U.length&&!Y.length){console.error("Configure layer in admin"),$();return}l.value={rows:j.rows||{},fields:Y,columns:U,html:j.html||null},d||I(a.value);const re=(B=j.rows)==null?void 0:B.geom;if(re){const X=typeof re=="string"?JSON.parse(re):re;X&&(a.value={...a.value,geometry:X,properties:{...((T=a.value)==null?void 0:T.properties)||{},geom:X,geom_4326:X}})}}catch(L){console.error("Failed to load feature card:",L),$()}finally{s.value=!1}}function $(){y(),I(null)}function w(){m(),y()}n().then(h),e.onBeforeUnmount(()=>w());function C(){const R=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof R!="string"?null:R.trim()||null}function E(R){var k,N;const M=(R==null?void 0:R.source)??((k=R==null?void 0:R.layer)==null?void 0:k.id),v=(N=R==null?void 0:R.properties)==null?void 0:N.id;return!M||v===void 0||v===null?null:`${M},${v}`.trim()||null}function I(R){const M=E(R),v=C();if(M===v)return;const b={...o.query};M?b.info=M:delete b.info,r.push({query:b}).catch(()=>{})}async function q(R){if(!R){y();return}if(R===E(a.value))return;const[M,v]=R.split(","),b=M==null?void 0:M.trim(),k=v==null?void 0:v.trim();if(!b||!k){y(),I(null);return}d=!0;try{const N={source:b,properties:{id:k}};f.value=[N],u.value=0;const B=ue(b);await D(N,B==null?void 0:B.card)}finally{d=!1}}return e.watch(()=>C(),R=>{R!==E(a.value)&&(d=!0,q(R).finally(()=>{d=!1}))}),{card:l,cardFeature:a,cardError:i,cardLoading:s,isOpen:c,close:$,next:A,prev:F,count:x,index:u}}function Sp(){const{map:t,ready:n}=Se(),o=e.ref([]),r=e.ref(0),l=e.ref(0),a=e.ref(!1),i=e.ref(null),s=e.ref({}),f=e.ref(null),u=e.ref([]),x=e.computed(()=>o.value[l.value]||null),c=e.computed(()=>o.value.length>0);let g=null;const d=()=>{g==null||g.remove(),g=null},y=C=>C?C.type==="FeatureCollection"?C:C.type==="Feature"?{type:"FeatureCollection",features:[C]}:C.type&&Array.isArray(C.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:C,properties:{}}]}:Array.isArray(C.features)?{type:"FeatureCollection",features:C.features}:C.geometry?y(C.geometry):null:null,m=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=C=>Number(C.toFixed(5)),p=async C=>{if(await n(),!t.value)return;const E=y(C);E&&(d(),g=ue("feature-highlight",{source:{type:"geojson",data:E},style:m()},t))},_=async(C,E,I)=>{var M,v;const[q,R]=[h(C),h(E)];f.value={x:q,y:R},u.value=I,a.value=!0,i.value=null,o.value=[],s.value={},l.value=0;try{const b=I.map(async L=>{const j=`/api/map-info-point?x=${q}&y=${R}&layers=${L}`,U=await fetch(j);if(!U.ok)return null;const Y=await U.json();if(!Y.count)return null;const X=await(await fetch(`${j}&index=0`)).json();return{layerId:L,data:X,count:Y.count}}),N=(await Promise.all(b)).filter(Boolean);if(N.length===0){r.value=0;return}o.value=N.map(L=>L.data);const[B]=o.value;r.value=N.reduce((L,j)=>L+(j.count||0),0),s.value[0]=B;const T=((M=B==null?void 0:B.data)==null?void 0:M.geom_4326)??((v=B==null?void 0:B.data)==null?void 0:v.geom);await p(T)}catch(b){i.value=b.message}finally{a.value=!1}},A=async C=>{if(!f.value||!u.value.length)return;if(s.value[C]){o.value[C]=s.value[C];return}const{x:E,y:I}=f.value,q=u.value.join(","),R=`/api/map-info-point?x=${E}&y=${I}&index=${C}&layers=${q}`;try{a.value=!0;const M=await fetch(R);if(!M.ok)throw new Error("Failed to fetch feature by index");const v=await M.json();o.value[C]=v,s.value[C]=v}catch(M){i.value=M.message}finally{a.value=!1}},F=async()=>{l.value<r.value-1&&(l.value+=1,s.value[l.value]||await A(l.value))},D=async()=>{l.value>0&&(l.value-=1,s.value[l.value]||await A(l.value))},$=()=>{o.value=[],r.value=0,l.value=0,s.value={},f.value=null,u.value=[],d()};e.watch(l,async()=>{var E,I;const C=x.value;if(C){const q=((E=C==null?void 0:C.data)==null?void 0:E.geom_4326)??((I=C==null?void 0:C.data)==null?void 0:I.geom);await p(q)}});let w=null;return e.onMounted(async()=>{await n(),t.value&&(w=async C=>{const{lng:E,lat:I}=C.lngLat,q=ue(),M=Object.entries(q).map(([v,b])=>{var k,N,B,T;return{id:v,service:((k=b==null?void 0:b.opts)==null?void 0:k.service)??((B=(N=b==null?void 0:b.opts)==null?void 0:N.source)==null?void 0:B.service)??null,count:((T=b==null?void 0:b.opts)==null?void 0:T.count)??null,visible:(()=>{var L;try{return((L=t.value)==null?void 0:L.getLayer(v))?t.value.getLayoutProperty(v,"visibility")!=="none":!0}catch{return!0}})()}}).filter(v=>v.service==="ogc"&&v.visible).map(v=>v.id);M.length>0&&await _(E,I,M)},t.value.on("dblclick",w))}),e.onBeforeUnmount(()=>{t.value&&w&&t.value.off("dblclick",w),d()}),{features:o,count:r,index:l,current:x,loading:a,error:i,active:c,next:F,prev:D,close:$}}const tl=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(u){const x=u.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(x)return x;const c=Array.from(u).map(g=>g.charCodeAt(0).toString(16)).join("").slice(0,8);return c?`layer-${c}`:"layer-temp"}const a=e.computed(()=>{var u;return((u=o.id)==null?void 0:u.trim())||l(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function s(){return{id:a.value,title:o.title,url:o.url}}function f(){r("activate",s())}return(u,x)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:f},[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),ze=e.ref([]);function Ap(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const a=n[l];return a!=null?String(a):""}):t}function fn(t){return t==null?"":String(t).trim()}function gn(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Lp(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Tp(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let r=0;r<n.length;r+=1){const l=n[r];if(!(!l||typeof l.id!="string")&&l.type&&l.type!=="background"&&l.type!=="raster")return l.id}}function yn(t){function n(a,i={},s,f){var _,A;const u=fn(a==null?void 0:a.id),x=((_=a==null?void 0:a.title)==null?void 0:_.trim())||u,c=((A=a==null?void 0:a.url)==null?void 0:A.trim())||"";if(!u||!c)return;const g=Ap(c,i);if(!g)return;const d=f??t;if(!d)return;const y=Lp(d);if(!y)return;const m=ze.value.findIndex(F=>F.id===u);m!==-1&&(gn(ze.value[m]),ze.value.splice(m,1));let h=null;const p=a.beforeId??Tp(y);try{h=ue(u,{source:{type:"raster",tiles:[g],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:u,type:"raster",source:u,paint:{"raster-opacity":a.opacity??.85}},beforeId:p},d)}catch(F){const D=(F==null?void 0:F.message)??"";if(!(typeof D=="string"&&D.includes("Map provider")))throw F;return}ze.value=[...ze.value,{id:u,title:x,originalUrl:c,resolvedUrl:g,owner:s??null,handle:h??null}]}function o(a,i){const s=fn(a);if(!s)return;const f=ze.value.findIndex(x=>x.id===s&&(!i||x.owner===i));if(f===-1)return;const[u]=ze.value.splice(f,1);gn(u)}function r(a){if(!ze.value.length)return;const i=[];ze.value.forEach(s=>{(a?s.owner===a:!0)?gn(s):i.push(s)}),ze.value=i}function l(a,i){const s=fn(a);return s?ze.value.some(f=>f.id===s&&(!i||f.owner===i)):!1}return{temporaryLayers:ze,activateTemporaryLayer:n,deactivateTemporaryLayer:o,clearTemporaryLayers:r,isTemporaryLayerActive:l}}const Fp={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},Mp={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Dp={class:"min-w-0 flex-1"},Ip={class:"text-base font-semibold text-slate-900 truncate"},jp={key:0,class:"flex gap-1 mt-1"},zp=["disabled"],Op=["disabled"],Pp={key:1,class:"flex gap-1 mt-1"},Rp=["disabled"],Up=["disabled"],qp={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},Hp={key:0,class:"text-center text-xs text-slate-500"},Wp={key:1,class:"text-center text-xs text-red-500"},Yp={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Zp={class:"divide-y divide-gray-100 py-[5px]"},Gp={class:"text-gray-900 font-normal"},Kp={key:0,class:"flex gap-1 flex-wrap"},Xp={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Jp=["innerHTML"],Qp=["innerHTML"],em={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},tm={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},nm={class:"text-xs tracking-[0.02em] leading-none"},om={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},lm={class:"space-y-1"},rm={class:"flex items-center cursor-pointer gap-2 flex-1"},am=["checked","onChange"],im={class:"text-[13px] text-gray-600"},sm={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},cm={key:5,class:"text-center text-xs text-slate-400"},dm="map:temporary-layer-request",um=14,nl=oe(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){var Ut,xl;const n=t,o=vp(),r=Sp(),l=e.computed(()=>r.active.value),a=e.computed(()=>l.value||o.isOpen.value),i=e.computed(()=>l.value?r.loading.value:o.cardLoading.value),s=e.computed(()=>l.value?r.error.value:o.cardError.value),f=e.computed(()=>{var V,S;return l.value?((V=r.current.value)==null?void 0:V.html)||null:((S=o.card.value)==null?void 0:S.html)||null}),u=Se(),x=he.useRoute(),{activateTemporaryLayer:c,deactivateTemporaryLayer:g,clearTemporaryLayers:d,isTemporaryLayerActive:y}=yn(u.map);function m(V){window.dispatchEvent(new CustomEvent(dm,{detail:V}))}const h=e.computed(()=>{var V;return((V=o.cardFeature.value)==null?void 0:V.source)??null}),p=e.computed(()=>h.value?`map-card:${h.value}`:"map-card"),_=e.computed(()=>{var G,ne;const V=o.cardFeature.value,S=(V==null?void 0:V.source)||((G=V==null?void 0:V.layer)==null?void 0:G.id),O=((ne=V==null?void 0:V.properties)==null?void 0:ne.id)??(V==null?void 0:V.id);return S&&O!=null?`${S}:${O}`:null}),A=e.ref(null),F=e.ref(null),D=e.ref(0),$=new Map;function w(){if(typeof window>"u")return null;const S=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return S&&S[1]?S[1]:null}const C=e.computed(()=>{const V=typeof n.mapId=="string"?n.mapId.trim():"";if(V.length)return V;const S=typeof x.params.slug=="string"?x.params.slug.trim():"";if(S.length)return S;const O=typeof x.query.slug=="string"?x.query.slug.trim():"";return O.length?O:w()}),E=e.ref(null),I=e.ref(null),q=new Map;function R(V){const S=V.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(S)return S;const O=Array.from(V).map(G=>G.charCodeAt(0).toString(16)).join("").slice(0,8);return O?`layer-${O}`:`layer-${Math.random().toString(36).slice(2,8)}`}function M(V){if(typeof V!="string")return"";const S=V.trim();if(!S)return"";if(/^https?:\/\//i.test(S))return S;if(S.startsWith("//"))return typeof window>"u"?`https:${S}`:`${window.location.protocol}${S}`;const O=typeof window<"u"?window.location.origin:"";return S.startsWith("/")?O?`${O}${S}`:S:O?`${O}/${S}`:S}function v(V){const S={},O=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let G;for(;(G=O.exec(V))!==null;){const ne=G[1],ie=G[2]??G[3]??G[4]??"";ne&&(S[ne]=ie)}return S}function b(V,S){for(const O of S)if(V[O]!=null&&String(V[O]).trim().length)return String(V[O]).trim();return""}function k(V){if(!(V!=null&&V.length))return;const S=Number(V);return Number.isFinite(S)?S:void 0}function N(V){if(typeof V!="string"||!V.length)return[];const S=[],O=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let G=0,ne;const ie=new Set,ke=we=>{let Be=we,Fe=2;for(;ie.has(Be);)Be=`${we}-${Fe}`,Fe+=1;return ie.add(Be),Be};for(;(ne=O.exec(V))!==null;){const[we,Be="",Fe=""]=ne,_e=ne.index;if(_e>G){const wl=V.slice(G,_e);wl.trim().length&&S.push({type:"html",content:wl})}const Oe=v(Be),je=b(Oe,["title"])||"Тимчасовий шар",et=M(b(Oe,["url"]));if(!et){S.push({type:"html",content:we}),G=_e+we.length;continue}const $t=b(Oe,["id"]),_n=b(Oe,["button-text","buttonText","show","show-label","showLabel"]),G1=k(b(Oe,["tile-size","tileSize"])),K1=k(b(Oe,["minzoom","minZoom"])),X1=k(b(Oe,["maxzoom","maxZoom"])),J1=k(b(Oe,["opacity"])),Q1=$t||R(`${je}-${et}`)||R(je),bl=ke(Q1||`layer-${S.length+1}`),En=Fe.trim(),kl=/<[^>]+>/.test(En),ex=kl?En:null,Nn=kl?null:En,tx=_n&&_n.trim().length?_n.trim():Nn&&Nn.trim().length?Nn.trim():void 0;S.push({type:"layer",spec:{id:bl,title:je,url:et,tileSize:G1,minzoom:K1,maxzoom:X1,opacity:J1},componentProps:{title:je,url:et,id:bl,buttonText:tx},slotText:ex}),G=_e+we.length}if(G<V.length){const we=V.slice(G);we.trim().length&&S.push({type:"html",content:we})}return!S.length&&V.trim().length&&S.push({type:"html",content:V}),S}function B(V){if(!V)return null;const S=typeof V.id=="string"?V.id.trim():"",O=typeof V.title=="string"?V.title.trim():"",G=M(typeof V.url=="string"?V.url:"");return!S||!G?null:{id:S,title:O||S,url:G,tileSize:V.tileSize,minzoom:V.minzoom,maxzoom:V.maxzoom,opacity:V.opacity}}const T=e.computed(()=>{if(l.value&&r.current.value)return r.current.value.data??{};const V=o.card.value;return(V==null?void 0:V.rows)??{}}),L=e.computed(()=>{if(l.value&&r.current.value)return r.current.value.fields??[];const V=o.card.value;if(!V)return[];const S=Array.isArray(V.columns)?V.columns:[];return S.length?S:Array.isArray(V.fields)?V.fields:[]}),j=e.computed(()=>{const V=L.value;if(!V.length)return[];const S=T.value;return V.map(O=>({key:O.name,label:O.ua||O.label||O.title||O.name,value:S[O.name]??"—",format:O.format||"text"}))}),U=new Set(["—","-","–","−"]);function Y(V){if(V==null)return!0;if(typeof V=="string"){const S=V.trim();return S.length?U.has(S):!0}return!1}function re(V){if(!V)return[];if(Array.isArray(V))return V;if(typeof V=="string"){const S=V.trim();if(S.startsWith("{")&&S.endsWith("}")){const G=S.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return G?G.map(ne=>ne.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const X=e.ref(!1),ee=e.ref(!0);if(typeof window<"u"){const V=(xl=(Ut=window.localStorage)==null?void 0:Ut.getItem)==null?void 0:xl.call(Ut,"cardHideEmpty"),S=typeof V=="string"&&V.toLowerCase()==="true";X.value=S,ee.value=!S}const fe=e.computed(()=>j.value.filter(V=>Y(V.value)).length),pe=e.computed(()=>X.value&&!ee.value?j.value.filter(V=>!Y(V.value)):j.value);function me(V){const S=typeof V=="string"?V:"";if(!S.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:S,hiddenCount:0};const G=new DOMParser().parseFromString(S,"text/html");let ne=0;return G.querySelectorAll("dd").forEach(ie=>{var Be;const ke=((Be=ie.textContent)==null?void 0:Be.trim())??"",we=ie.closest("div");if(Y(ke)){ne+=1,we?we.remove():ie.remove();return}}),{sanitized:G.body.innerHTML,hiddenCount:ne}}const P=e.computed(()=>me(f.value)),H=e.computed(()=>f.value?P.value.hiddenCount:0),W=e.computed(()=>fe.value+H.value),te=e.computed(()=>{var V;return X.value&&!ee.value&&!!((V=f.value)!=null&&V.trim())}),le=e.computed(()=>X.value&&W.value>0),de=e.computed(()=>ee.value?"Приховати пусті значення":"Показати пусті значення"),xe=e.computed(()=>ee.value?vl:$l);function se(){ee.value=!ee.value}const Ie=e.computed(()=>{const V=te.value?P.value.sanitized:f.value??"";return N(V)}),z=e.computed(()=>Ie.value.filter(V=>V.type==="layer"));function Z(V){return Array.isArray(V)?V.map((S,O)=>{const G=M(typeof(S==null?void 0:S.url)=="string"?S.url:""),ne=typeof(S==null?void 0:S.geohub)=="string"&&S.geohub.trim().length?`/api-hub/tms/${S.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",ie=((S==null?void 0:S.name)||(S==null?void 0:S.title)||(S==null?void 0:S.label)||`Шар ${O+1}`).toString(),ke=(S==null?void 0:S.id)!=null?String(S.id):R(`${ie}-${O+1}`),we=(S==null?void 0:S.buttonText)||(S==null?void 0:S.button_text)||null,Be=(S==null?void 0:S.description)||(S==null?void 0:S.subtitle)||null,Fe=G||M(ne)||"";if(!Fe)return null;const _e={id:ke,title:ie,url:Fe,subtitle:Be,buttonText:we||void 0};return typeof(S==null?void 0:S.tileSize)=="number"&&(_e.tileSize=S.tileSize),typeof(S==null?void 0:S.tile_size)=="number"&&(_e.tileSize=S.tile_size),typeof(S==null?void 0:S.minzoom)=="number"&&(_e.minzoom=S.minzoom),typeof(S==null?void 0:S.maxzoom)=="number"&&(_e.maxzoom=S.maxzoom),typeof(S==null?void 0:S.opacity)=="number"&&(_e.opacity=S.opacity),_e}).filter(Boolean):[]}const ae=e.computed(()=>{var G,ne;const V=o.card.value,S=r.current.value,O=[(G=V==null?void 0:V.rows)==null?void 0:G.layers,V==null?void 0:V.layers,(ne=S==null?void 0:S.data)==null?void 0:ne.layers,S==null?void 0:S.layers];for(const ie of O){const ke=Z(ie);if(ke.length)return ke}return[]}),be=e.computed(()=>Ie.value.length>0||j.value.length>0||ae.value.length>0),Q=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function ge(){const V={},S=E.value;if(S&&typeof S=="object"&&Object.entries(S).forEach(([O,G])=>{typeof G=="string"&&(V[O]=G)}),h.value&&(V.layer=h.value),!V.geohub){const O=typeof(S==null?void 0:S.geohub)=="string"?S.geohub:null,G=typeof(S==null?void 0:S.geohub_key)=="string"?S.geohub_key:null,ne=typeof(S==null?void 0:S.geohubId)=="string"?S.geohubId:null;V.geohub=O||G||ne||V.layer||""}return V}async function Le(){const V=h.value;if(!V)return E.value=null,I.value=null,null;if(I.value===V&&E.value)return E.value;if(q.has(V)){const S=q.get(V);return E.value=S,I.value=V,S}try{const S=await fetch(`/api/gis-service/${encodeURIComponent(V)}`);if(!S.ok)return null;const O=await S.json();return q.set(V,O),E.value=O,I.value=V,O}catch{return null}}async function K(V){if(!(V!=null&&V.id))return;await Le();const S=ge(),O=z.value.find(ke=>ke.spec.id===V.id),G=ae.value.find(ke=>ke.id===V.id),ne=(O==null?void 0:O.spec)||B(G)||B(V);if(!ne||y(ne.id,p.value))return;const ie=p.value||void 0;A.value=ie??null,c(ne,S,ie),m({action:"activate",owner:ie,spec:ne,context:S})}function $e(V){if(!V)return;const S=He()||void 0;g(V,S),m({action:"deactivate",owner:S,spec:{id:V}})}function Te(V){return y(V,He())}function Re(V,S){const O=S.target;!!(O!=null&&O.checked)?K(V):$e(V.id)}function He(){return A.value||p.value||null}e.watch(h,(V,S)=>{V!==S&&(E.value=null,I.value=null)});const{next:Je,prev:Qe,count:We,index:Ue}=r,nt=e.computed(()=>o.count.value),kn=e.computed(()=>o.index.value),ul=e.computed(()=>nt.value>1),pl=e.computed(()=>l.value?We.value:nt.value),ml=e.computed(()=>l.value?Ue.value:kn.value),fl=o.next,gl=o.prev;function ot(){const V=He();V&&(d(V),m({action:"clear",owner:V}),A.value=null)}function O1(){o.close(),r.close(),ot()}e.watch(a,(V,S)=>{!V&&S&&(ot(),Ye())});function yl(){!o.isOpen.value&&!r.active.value&&ot()}e.watch(()=>o.isOpen.value,()=>{yl()}),e.watch(()=>r.active.value,()=>{yl()}),e.watch(h,(V,S)=>{V&&S&&V!==S&&ot()}),e.watch(Ue,(V,S)=>{V!==S&&ot()}),e.watch(_,(V,S)=>{V&&S&&V!==S&&ot()});function P1(V){if(!V)return null;if(V.geometry)return V.geometry;const S=(V==null?void 0:V.data)??(V==null?void 0:V.properties);return S!=null&&S.geom_4326?S.geom_4326:S!=null&&S.geom?S.geom:null}function Ye(){var V,S;(S=(V=F.value)==null?void 0:V.remove)==null||S.call(V),F.value=null}function R1(V){var O,G,ne;const S=(V==null?void 0:V.type)||((ne=(G=(O=V==null?void 0:V.features)==null?void 0:O[0])==null?void 0:G.geometry)==null?void 0:ne.type)||"";return S.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:S.includes("LineString")?{type:"line",paint:{"line-color":"#0a57ff","line-width":3,"line-opacity":.9}}:{type:"circle",paint:{"circle-color":"#0a57ff","circle-opacity":.9,"circle-radius":8,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}}let wn=null;function hl(){const V=Array.isArray(x.query.info)?x.query.info[0]:x.query.info;return typeof V!="string"?null:V.trim()||null}function U1(V){var ne,ie;if(!V)return null;const S=(V==null?void 0:V.source)??((ne=V==null?void 0:V.layer)==null?void 0:ne.id),O=((ie=V==null?void 0:V.properties)==null?void 0:ie.id)??(V==null?void 0:V.id);return!S||O===void 0||O===null?null:`${S},${O}`.trim()||null}function Rt(V,S){if(V){if(Array.isArray(V)){if(V.length>=2&&typeof V[0]=="number"&&typeof V[1]=="number"){S.push([V[0],V[1]]);return}V.forEach(O=>Rt(O,S));return}typeof V=="object"&&(Array.isArray(V.coordinates)&&Rt(V.coordinates,S),Array.isArray(V.features)&&V.features.forEach(O=>Rt(O==null?void 0:O.geometry,S)))}}function q1(V){var we,Be;if(!V)return null;const S=V.type==="FeatureCollection"?(Be=(we=V.features)==null?void 0:we[0])==null?void 0:Be.geometry:V.type==="Feature"?V.geometry:V,O=[];if(Rt(S,O),!O.length)return null;let G=O[0][0],ne=O[0][0],ie=O[0][1],ke=O[0][1];return O.forEach(([Fe,_e])=>{Fe<G&&(G=Fe),Fe>ne&&(ne=Fe),_e<ie&&(ie=_e),_e>ke&&(ke=_e)}),[(G+ne)/2,(ie+ke)/2]}async function H1(V,S){var ie;const O=hl();if(!O)return;const G=U1(V);if(!G||G!==O||wn===O)return;const ne=q1(S);ne&&(await((ie=u.ready)==null?void 0:ie.call(u)),u.flyTo({center:ne,zoom:um}),wn=O)}function W1(V){var ne;if(!V){Ye();return}const S=(ne=u.map)==null?void 0:ne.value,O={type:"FeatureCollection",features:[{type:"Feature",geometry:V,properties:{}}]};Ye();const G=R1(V);if(F.value=ue("feature-card-highlight",{source:{type:"geojson",data:O},layer:{id:"feature-card-highlight",type:G.type,source:"feature-card-highlight",paint:G.paint}},u.map),S!=null&&S.moveLayer){const ie=()=>{try{S.moveLayer("feature-card-highlight")}catch{}},ke=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(ie)}):setTimeout(ie,0)};ke();const we=()=>ke();S.once("styledata",we);const Be=()=>{ke(),S.off("styledata",we),S.off("idle",Be)};S.on("idle",Be)}}function Y1(V){var G,ne;const S=(V==null?void 0:V.source)||((G=V==null?void 0:V.layer)==null?void 0:G.id)||"unknown",O=((ne=V==null?void 0:V.properties)==null?void 0:ne.id)??(V==null?void 0:V.id)??"unknown";return`${S}:${O}`}async function Z1(V){var ie,ke,we,Be,Fe;if(!V)return null;const S=P1(V);if(S)return S;const O=((ie=V==null?void 0:V.properties)==null?void 0:ie.id)??(V==null?void 0:V.id);if(!O)return null;const G=Y1(V);if($.has(G))return $.get(G);const ne=[C.value,V==null?void 0:V.source,(ke=V==null?void 0:V.layer)==null?void 0:ke.id].map(_e=>typeof _e=="string"?_e.trim():"").filter(Boolean);for(const _e of ne)try{const Oe=await fetch(`/api/map-features/${encodeURIComponent(_e)}/${encodeURIComponent(String(O))}`);if(!Oe.ok)continue;const je=await Oe.json(),et=((we=je==null?void 0:je.data)==null?void 0:we.geom)||((Be=je==null?void 0:je.data)==null?void 0:Be.geometry)||((Fe=je==null?void 0:je.data)==null?void 0:Fe.geom_4326)||null,$t=typeof et=="string"?JSON.parse(et):et;if($t)return $.set(G,$t),$t}catch{continue}return null}async function Ct(V){D.value+=1;const S=D.value;if(!V||l.value){Ye();return}if(!Q.value){Ye();return}const O=await Z1(V);if(S===D.value){if(!O){Ye();return}W1(O),H1(V,O)}}return e.watch(()=>o.cardFeature.value,V=>{Ct(V)},{immediate:!0}),e.watch(()=>o.index.value,()=>{l.value||Ct(o.cardFeature.value)}),e.watch(l,V=>{V?Ye():Ct(o.cardFeature.value)}),e.watch(C,()=>{!l.value&&o.cardFeature.value&&Ct(o.cardFeature.value)}),e.watch(Q,V=>{V?Ct(o.cardFeature.value):Ye()}),e.watch(()=>hl(),()=>{wn=null}),e.onBeforeUnmount(()=>{ot(),Ye()}),(V,S)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",Fp,[e.createElementVNode("div",Mp,[e.createElementVNode("div",Dp,[e.createElementVNode("p",Ip,[l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(ml.value+1)+" / "+e.toDisplayString(pl.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[ul.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(ml.value+1)+" / "+e.toDisplayString(pl.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),l.value&&e.unref(We)>1?(e.openBlock(),e.createElementBlock("div",jp,[e.createElementVNode("button",{onClick:S[0]||(S[0]=(...O)=>e.unref(Qe)&&e.unref(Qe)(...O)),disabled:e.unref(Ue)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Cn),{class:"h-4 w-4"})],8,zp),e.createElementVNode("button",{onClick:S[1]||(S[1]=(...O)=>e.unref(Je)&&e.unref(Je)(...O)),disabled:e.unref(Ue)===e.unref(We)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref($n),{class:"h-4 w-4"})],8,Op)])):!l.value&&ul.value?(e.openBlock(),e.createElementBlock("div",Pp,[e.createElementVNode("button",{onClick:S[2]||(S[2]=(...O)=>e.unref(gl)&&e.unref(gl)(...O)),disabled:kn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Cn),{class:"h-4 w-4"})],8,Rp),e.createElementVNode("button",{onClick:S[3]||(S[3]=(...O)=>e.unref(fl)&&e.unref(fl)(...O)),disabled:kn.value===nt.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref($n),{class:"h-4 w-4"})],8,Up)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700 ml-1",onClick:O1}," ✕ ")]),e.createElementVNode("div",qp,[i.value?(e.openBlock(),e.createElementBlock("div",Hp," Завантаження даних… ")):s.value?(e.openBlock(),e.createElementBlock("div",Wp,e.toDisplayString(s.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[j.value.length?(e.openBlock(),e.createElementBlock("div",Yp,[e.createElementVNode("dl",Zp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(pe.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",Gp,e.toDisplayString(O.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",O.format==="badge"?"font-semibold text-yellow-800":""])},[O.format==="tags"?(e.openBlock(),e.createElementBlock("div",Kp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(re(O.value),(G,ne)=>(e.openBlock(),e.createElementBlock("span",{key:ne,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(G),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(O.value),1)],64))],2)]))),128))])])):Ie.value.length?(e.openBlock(),e.createElementBlock("div",Xp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ie.value,(O,G)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:G},[O.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:O.content},null,8,Jp)):(e.openBlock(),e.createBlock(tl,{key:1,title:O.componentProps.title,url:O.componentProps.url,id:O.componentProps.id,"button-text":O.componentProps.buttonText,onActivate:K},e.createSlots({_:2},[O.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:O.slotText},null,8,Qp)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),z.value.length?(e.openBlock(),e.createElementBlock("div",em,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,O=>(e.openBlock(),e.createBlock(tl,{key:O.spec.id,title:O.componentProps.title,url:O.componentProps.url,id:O.spec.id,"button-text":O.componentProps.buttonText,onActivate:K},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),le.value?(e.openBlock(),e.createElementBlock("div",tm,[e.createElementVNode("button",{type:"button",class:"flex items-center gap-1 justify-end w-full font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-60 cursor-pointer",onClick:se},[e.createElementVNode("span",nm,e.toDisplayString(de.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(xe.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),ae.value.length?(e.openBlock(),e.createElementBlock("div",om,[S[5]||(S[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",lm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ae.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",rm,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:Te(O.id),onChange:G=>Re(O,G)},null,40,am),S[4]||(S[4]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",im,e.toDisplayString(O.title),1)]),O.subtitle?(e.openBlock(),e.createElementBlock("div",sm,e.toDisplayString(O.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),be.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",cm," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-763da13a"]]),ol=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var g,d;const n=t,o=((d=(g=e.getCurrentInstance())==null?void 0:g.appContext.config.globalProperties)==null?void 0:d.$settings)||null,{map:r,ready:l}=Se();let a=null;function i(){a==null||a.remove(),a=null}function s(y){if(!y)return null;if(typeof y=="string")try{y=JSON.parse(y)}catch{return null}return y.type==="FeatureCollection"?y:y.type==="Feature"?{type:"FeatureCollection",features:[y]}:y.type&&Array.isArray(y.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:y,properties:{}}]}:Array.isArray(y.features)?{type:"FeatureCollection",features:y.features}:y.geometry?s(y.geometry):null}function f(y){var p,_,A;return{type:"line",color:"#8e4484",width:2,opacity:((((A=(_=(p=y==null?void 0:y.features)==null?void 0:p[0])==null?void 0:_.geometry)==null?void 0:A.type)||"").includes("Polygon"),.95)}}async function u(y){const m=await fetch(y);if(!m.ok)throw new Error(String(m.status));return m.json()}async function x(y,m){if(y){const h=/^https?:\/\//.test(y)?y:new URL(y,location.origin).toString(),p=await u(h).catch(()=>null),_=s(p);if(_)return _}if(m){const h=await u(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(m)}`).catch(()=>null),p=s(h);if(p)return p}return null}async function c(){var p,_,A,F;if(!n.layerId||!r.value){i();return}typeof l=="function"&&await l().catch(()=>{});const y=n.boundary??((p=n.settingsMap)==null?void 0:p.boundary)??((_=o==null?void 0:o.map)==null?void 0:_.boundary)??null,m=n.katottg??((A=n.settingsMap)==null?void 0:A.katottg)??((F=o==null?void 0:o.map)==null?void 0:F.katottg)??null;if(!y&&!m){i();return}const h=await x(y,m);if(!h){i();return}i(),a=ue(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:f(h)},r)}return e.watch(()=>{var y,m;return[n.layerId,n.boundary,n.katottg,(y=n.settingsMap)==null?void 0:y.boundary,(m=n.settingsMap)==null?void 0:m.katottg,r.value]},()=>{c()},{immediate:!0}),e.onBeforeUnmount(i),(y,m)=>null}}),pm={class:"map-center-control"},mm=["aria-label"],fm={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},hn=oe(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Se(),l=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(null);function f(y){if(Array.isArray(y)&&y.length>=2){const[m,h]=y.slice(0,2).map(p=>Number(p));return Number.isNaN(m)||Number.isNaN(h)?null:[m,h]}if(y&&typeof y=="object"){const m=y,h=m.lng??m.lon??m.long??m.x,p=m.lat??m.y;if(h!=null&&p!=null){const _=Number(h),A=Number(p);if(!Number.isNaN(_)&&!Number.isNaN(A))return[_,A]}}if(typeof y=="string"){const m=y.split(",").map(h=>Number(h.trim()));if(m.length>=2&&m.every(h=>!Number.isNaN(h)))return[m[0],m[1]]}return null}e.watch(()=>n.center,y=>{const m=f(y);m&&(l.value=m)},{immediate:!0}),e.watch(()=>n.zoom,y=>{const m=Number(y);Number.isNaN(m)||(a.value=m)},{immediate:!0}),e.watch(()=>n.targetCenter,y=>{i.value=f(y)},{immediate:!0}),e.watch(()=>n.targetZoom,y=>{const m=Number(y);s.value=Number.isNaN(m)?null:m},{immediate:!0});const u=e.computed(()=>{var y;return((y=n.targetLabel)==null?void 0:y.trim())||"Точка"}),x=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),c=e.computed(()=>!!i.value);e.onMounted(async()=>{await(r==null?void 0:r());const y=o.value;if(y){if(!l.value){const m=y.getCenter();l.value=[m.lng,m.lat]}a.value==null&&(a.value=y.getZoom())}});function g(){const y=o.value;if(!y)return;const m=l.value||(()=>{const p=y.getCenter();return[p.lng,p.lat]})(),h=a.value??y.getZoom();y.flyTo({center:m,zoom:h})}function d(){const y=o.value;if(!y||!i.value)return;const m=s.value??a.value??y.getZoom();y.flyTo({center:i.value,zoom:m})}return(y,m)=>(e.openBlock(),e.createElementBlock("div",pm,[c.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(g,["stop"])},[m[0]||(m[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(Tl),{class:"w-4 h-4"})])),c.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":x.value,onClick:e.withModifiers(d,["stop"])},[e.createElementVNode("span",fm,e.toDisplayString(u.value),1),e.createVNode(e.unref(Fl),{class:"w-4 h-4"})],8,mm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-80ea583c"]]),gm={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},ym={class:"flex-1 relative overflow-hidden"},hm={class:"absolute top-0 left-0 w-full z-20"},xm={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},bm={class:"flex items-center gap-3 h-[2.75rem]"},km={class:"font-semibold text-lg text-gray-800 line-clamp-1"},wm={key:0,class:"text-xs text-gray-500 truncate"},_m=["title"],Em={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Nm={class:"relative w-full h-full"},Bm={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},Vm={class:"absolute top-4 left-4 z-20"},Cm={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},$m={class:"absolute bottom-4 left-4 z-20"},vm={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},Sm={class:"flex-1 flex flex-col h-full"},Am={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Lm={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Tm=["aria-selected","onClick"],Fm={class:"leading-none"},Mm={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Dm=oe(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var R,M;const n=he.useRoute(),o=he.useRouter(),{id:r}=n.params,l=e.ref(null),a=e.ref({}),i=e.ref(null),s=((M=(R=e.getCurrentInstance())==null?void 0:R.appContext.config.globalProperties)==null?void 0:M.$settings)||null,f=e.ref(null),u=e.ref(""),x=e.ref([]),c=e.ref([]),g=e.ref([]),d=e.ref("list"),y=e.ref(""),m=e.ref([]),h=e.computed(()=>{var v,b;return((v=i.value)==null?void 0:v.id)??((b=i.value)==null?void 0:b.service_id)??null}),p=e.computed(()=>{const v=(s==null?void 0:s.map)||null,b=(v==null?void 0:v.boundary)??null,k=(v==null?void 0:v.katottg)??null;return!b&&!k?null:{boundary:b,katottg:k}}),_=[{key:"style",label:"Стиль",icon:Zo},{key:"popup",label:"Попап",icon:fu},{key:"filter",label:"Фільтр",icon:xu},{key:"legend",label:"Легенда",icon:au},{key:"card",label:"Картка",icon:du}],A=_.map(v=>v.key),F=e.ref("style");e.onMounted(async()=>{const v=n.query.tab;v&&A.includes(v)&&(F.value=v),await w()}),e.watch(F,v=>{n.query.tab!==v&&o.replace({query:{...n.query,tab:v}})}),e.watch(()=>n.query.tab,v=>{v&&A.includes(v)&&F.value!==v&&(F.value=v)});function D(v){if(!v)return null;try{return JSON.parse(JSON.stringify(v))}catch(b){return console.warn("Failed to clone style",b),null}}function $(v){if(!v)return null;if(typeof v=="string")try{return rn(Yo.load(v)||null)}catch(b){return console.warn("Failed to parse style yaml",b),null}return rn(D(v))}const w=async()=>{try{const v=await fetch(`/api/gis-service/${r}`);if(!v.ok)throw new Error(`${v.status}`);const b=await v.json();a.value=b||{},l.value=r;const k=$(b.style);i.value=b?{...b,style:D(k)}:null,f.value=k,u.value=typeof(b==null?void 0:b.style)=="string"?b.style:k?Yo.dump(k):"",c.value=(b==null?void 0:b.popup)||[],d.value=b.card_mode==="html"?"html":"list",g.value=b.card,y.value=b.html,x.value=(b==null?void 0:b.legend)||[],m.value=(b==null?void 0:b.filters)||[]}catch(v){console.error("Failed to fetch map info",v)}};e.watch(()=>{var v;return(v=i.value)==null?void 0:v.style},v=>{f.value=$(v)},{deep:!0});async function C(v,b){await I({[v]:b},v)}function E(){const v=D(f.value);i.value=i.value?{...i.value,style:v}:i.value}async function I(v,b){if(i.value={...i.value||{},...v},typeof v.html<"u"&&(a.value={...a.value||{},html:v.html}),!!h.value)try{if(!(await fetch(`/api/gis-service/${h.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)})).ok)throw new Error("Save failed");ce.notify({type:"success",title:"Успіх",message:`${b} saved`}),await w()}catch(k){ce.notify({type:"error",title:"Помилка",message:`Failed to save ${b}`}),console.error(k)}}async function q(v,b){if(v!=="card"){await C(v,b);return}const k=(b==null?void 0:b.card_mode)==="html"?"html":"list",N=k==="html"&&typeof(b==null?void 0:b.html)=="string"?b.html:"",B=(k==="html"?[]:null)||(Array.isArray(b==null?void 0:b.list)?b.list:[]);g.value=B,d.value=k,y.value=N;const T={card_mode:k};k==="html"&&(T.html=N),k==="list"&&(T.card=B),await I(T,"card")}return(v,b)=>{var k,N,B,T;return e.openBlock(),e.createElementBlock("div",gm,[e.createElementVNode("div",ym,[e.createElementVNode("div",hm,[e.createElementVNode("div",xm,[e.createElementVNode("div",bm,[e.createElementVNode("button",{onClick:b[0]||(b[0]=L=>v.$router.back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...b[10]||(b[10]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",km,e.toDisplayString((k=i.value)==null?void 0:k.name),1),t.hideServiceKey?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",wm," Сервіс: "+e.toDisplayString((N=i.value)==null?void 0:N.service_key),1))])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(B=i.value)==null?void 0:B.description},e.toDisplayString((T=i.value)==null?void 0:T.description),9,_m)])]),e.createElementVNode("div",Em,[e.createElementVNode("div",Nm,[e.createVNode(It,null,{default:e.withCtx(()=>{var L,j,U,Y,re,X,ee;return[(L=i.value)!=null&&L.service_id?(e.openBlock(),e.createBlock(dp,{key:0,id:(j=i.value)==null?void 0:j.service_id,layer:i.value,"style-spec":((U=i.value)==null?void 0:U.style)||null},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),h.value?(e.openBlock(),e.createBlock(ol,{key:1,"layer-id":h.value,boundary:((Y=i.value)==null?void 0:Y.boundary)||((re=p.value)==null?void 0:re.boundary)||null,katottg:((X=i.value)==null?void 0:X.katottg)||((ee=p.value)==null?void 0:ee.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Bm,[h.value?(e.openBlock(),e.createBlock(pn,{key:0,"layer-id":h.value,filters:m.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),b[11]||(b[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",Vm,[e.createVNode(Nt)]),e.createElementVNode("div",Cm,[e.createVNode(hn),a.value.center?(e.openBlock(),e.createBlock(hn,{key:0,targetCenter:a.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",$m,[e.createVNode(mn,{items:x.value||null},null,8,["items"])]),e.createVNode(el),e.createVNode(nl,{html:a.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",vm,[e.createElementVNode("div",Sm,[e.createElementVNode("div",Am,[e.createElementVNode("div",Lm,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,L=>e.createElementVNode("button",{key:L.key,type:"button",role:"tab","aria-selected":F.value===L.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",F.value===L.key?"bg-white shadow-sm text-gray-700":""]),onClick:j=>F.value=L.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(L.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Fm,e.toDisplayString(L.label),1)],10,Tm)),64))])]),e.createElementVNode("div",Mm,[F.value==="style"?(e.openBlock(),e.createBlock(Bu,{key:0,token:h.value,"style-text":u.value,"style-yaml":f.value,"onUpdate:styleYaml":b[1]||(b[1]=L=>f.value=L),"onUpdate:styleText":b[2]||(b[2]=L=>u.value=L),onUpdate:E},null,8,["token","style-text","style-yaml"])):F.value==="legend"?(e.openBlock(),e.createBlock(Qu,{key:1,token:h.value,columns:x.value,"onUpdate:columns":b[3]||(b[3]=L=>x.value=L),onSave:b[4]||(b[4]=L=>C("legend",L))},null,8,["token","columns"])):F.value==="popup"?(e.openBlock(),e.createBlock(Hu,{key:2,token:h.value,columns:c.value,fields:a.value.fields,"onUpdate:columns":b[5]||(b[5]=L=>c.value=L),onSave:b[6]||(b[6]=L=>C("popup",L))},null,8,["token","columns","fields"])):F.value==="card"?(e.openBlock(),e.createBlock(ip,{key:3,token:h.value,columns:g.value,fields:a.value.fields,"view-mode":d.value,html:y.value,"onUpdate:columns":b[7]||(b[7]=L=>g.value=L),onSave:q},null,8,["token","columns","fields","view-mode","html"])):F.value==="filter"?(e.openBlock(),e.createBlock(cp,{key:4,token:h.value,fields:a.value.fields,columns:m.value,"onUpdate:columns":b[8]||(b[8]=L=>m.value=L),onSave:b[9]||(b[9]=L=>C("filters",L))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),[["__scopeId","data-v-5195b994"]]),Im={class:"flex-1 overflow-y-auto p-4 sm:p-6"},jm={class:"space-y-3"},zm={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},Om={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},Pm={class:"text-xs text-gray-500 mb-1"},Rm={key:0,class:"text-base text-md font-semibold text-gray-900"},Um={key:1,class:"text-base text-md font-semibold text-gray-900"},qm={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},Hm={class:"space-y-2"},Wm={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},Ym={class:"text-sm font-semibold text-gray-900"},Zm={class:"text-xs text-gray-600 mt-1"},Gm={class:"grid grid-cols-2 gap-3"},Km={class:"text-xs text-gray-500 mb-1"},Xm={class:"text-sm font-semibold text-gray-900"},Jm={class:"bg-gray-50 p-4 rounded-lg"},Qm={class:"grid grid-cols-2 gap-4"},ef={class:"text-xs text-gray-500 mb-1"},tf={class:"text-sm font-semibold text-gray-900"},nf=e.defineComponent({directives:{tooltip:ce.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",Im,[e.createElementVNode("div",jm,[e.createElementVNode("div",zm,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",Om,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",Pm,e.toDisplayString(l.label),1),l.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",Rm,[e.createTextVNode(e.toDisplayString(l.value),1)])),[[r,l.tooltip]]):(e.openBlock(),e.createElementBlock("p",Um,e.toDisplayString(l.value),1))]))),128))])]),e.createElementVNode("div",qm,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-2"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",Hm,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",Wm,[e.createElementVNode("p",Ym,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",Zm,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",Gm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",Km,e.toDisplayString(l.label),1),e.createElementVNode("p",Xm,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Jm,[e.createElementVNode("div",Qm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",ef,e.toDisplayString(l.label),1),e.createElementVNode("p",tf,e.toDisplayString(l.value),1)]))),128))])])])])])])}}}),of={class:"flex-1 overflow-y-auto space-y-3 pr-1"},lf={class:"font-medium text-sm text-gray-800"},rf={class:"text-xs text-gray-500"},af=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",of,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,r=>(e.openBlock(),e.createElementBlock("div",{key:r.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",lf,e.toDisplayString(r.name),1),e.createElementVNode("p",rf,e.toDisplayString(r.resolution)+" • "+e.toDisplayString(r.size)+"MB",1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",r.statusClass])},e.toDisplayString(r.status),3)]))),128))]))}}),sf={},cf={xmlns:"http://www.w3.org/2000/svg",width:"12px",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function df(t,n){return e.openBlock(),e.createElementBlock("svg",cf,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8",fill:"none",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e.createElementVNode("polygon",{fill:"none",points:"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])}const uf=oe(sf,[["render",df]]),pf={},mf={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function ff(t,n){return e.openBlock(),e.createElementBlock("svg",mf,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const gf=oe(pf,[["render",ff]]),yf={class:"absolute top-[5.5rem] left-4 z-30 flex items-center gap-2 rounded-full bg-white/90 px-3 py-1 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},hf=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{}},setup(t){const n=t,o=n.layerId||"raster-preview-layer",r=`${o}-source`,l=n.extent&&n.extent.length===4?[...n.extent]:void 0,a=ue(o,{sourceId:r,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl]:[],tileSize:256,...l?{bounds:l}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":.95}},beforeId:n.beforeId??null}),{fitBounds:i}=Se(),s=e.ref(.95);e.watch(()=>n.tileUrl,x=>{if(!x){a.setVisible(!1);return}a.setVisible(!0),a.setTiles([x])},{immediate:!0}),e.watch(()=>s.value,x=>{a.setOpacity(x)},{immediate:!0});let f=null;e.watch(()=>n.extent,x=>{if(!x||x.length!==4)return;const c=x.join(",");c!==f&&(f=c,i==null||i([[x[0],x[1]],[x[2],x[3]]],{padding:40,maxZoom:17}))},{immediate:!0});const u=e.computed(()=>`${Math.round(s.value*100)}%`);return(x,c)=>(e.openBlock(),e.createElementBlock("div",yf,[c[1]||(c[1]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":c[0]||(c[0]=g=>s.value=g),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,s.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(u.value),1)]))}}),xf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},bf={class:"flex-1 relative overflow-hidden"},kf={class:"absolute top-0 left-0 w-full z-20"},wf={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},_f={class:"flex items-center gap-3"},Ef={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Nf={key:0,class:"text-xs text-gray-500 truncate"},Bf=["title"],Vf={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Cf={class:"relative w-full h-full"},$f={class:"absolute top-4 left-4 z-20"},vf={class:"w-[520px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},Sf={class:"flex-1 flex flex-col h-full"},Af={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Lf={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Tf=["aria-selected","onClick"],Ff={class:"leading-none"},Mf={class:"flex flex-col flex-1 overflow-y-hidden p-4"},Df={key:0,class:"mb-3 text-xs text-slate-500"},If={key:1,class:"mb-3 text-xs text-rose-600"},jf=e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=he.useRouter(),r=he.useRoute(),l=e.computed(()=>{var k;const b=(k=r.params)==null?void 0:k.id;return typeof b=="string"?b:void 0}),a=e.ref(null),i=e.ref(!1),s=e.ref(null),f=e.computed(()=>{var k;const b=(k=a.value)==null?void 0:k.url;return b?/^https?:\/\//i.test(b)||typeof window>"u"||typeof location>"u"?b:`${location.origin}${b}`:""}),u=e.computed(()=>{var b;return((b=a.value)==null?void 0:b.extent)??null}),x=e.computed(()=>l.value?`raster-${l.value}`:void 0),c=e.computed(()=>{const b=x.value??"raster",k=u.value&&u.value.length===4?u.value.join(","):"no-extent";return`${b}-${k}`}),g=e.computed(()=>!!f.value),d=e.computed(()=>{var L,j;const b=a.value,k=b==null?void 0:b.extent,N=l.value,B=N??"—",T=N?`Растер ${N}`:"Растер";return{id:B,name:(b==null?void 0:b.name)||((j=(L=b==null?void 0:b.files)==null?void 0:L[0])==null?void 0:j.name)||T,description:b!=null&&b.extension?`Формат ${b.extension.toUpperCase()}`:"Попередній перегляд растрового шару. Реальні метадані підвантажуються.",coverage:k&&k.length===4?`${v(k[0])}, ${v(k[1])} → ${v(k[2])}, ${v(k[3])}`:"Покриття уточнюється",crs:b!=null&&b.srid?`EPSG:${b.srid}`:"EPSG:4326",source:b!=null&&b.proj4?b.proj4:"Джерело: Mapnik",updatedAt:b!=null&&b.cache?"Дані кешовано":"Нові дані"}}),y=e.computed(()=>{const b=a.value;return b?[b.source_path,b.description,b.is_public?"Публічна":"Не публічна",b.is_active?"Архівна":"Активна"].filter(k=>k).join(", "):""}),m=[{key:"info",label:"Інформація",icon:gf},{key:"files",label:"Файли",icon:uf}],h=m.map(b=>b.key),p=e.ref(h.includes(r.query.tab)?r.query.tab:"info");e.watch(()=>r.query.tab,b=>{b&&h.includes(b)&&p.value!==b&&(p.value=b)}),e.watch(p,b=>{r.query.tab!==b&&o.replace({query:{...r.query,tab:b}})});const _=e.computed(()=>D(a.value)),A=e.computed(()=>w(a.value));e.watch(l,()=>{F()},{immediate:!0});async function F(){const b=l.value;if(!b){a.value=null,s.value=null;return}i.value=!0,s.value=null;try{const k=await fetch(`/api/gis-raster/${encodeURIComponent(b)}`);if(!k.ok)throw new Error(`HTTP ${k.status}`);const N=await k.json();a.value=N}catch(k){console.error("Failed to load raster info",k),a.value=null,s.value=k instanceof Error?k.message:String(k)}finally{i.value=!1}}function D(b){var k;return(k=b==null?void 0:b.files)!=null&&k.length?b.files.map(N=>({name:N.name,resolution:$(N.name,b),size:N.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function $(b,k){const N=b.toLowerCase();return N.endsWith(".tfw")?"Georeference":N.endsWith(".xml")?"Опис":N.endsWith(".tif")||N.endsWith(".tiff")?k!=null&&k.resolution?k.resolution:"Растер":(k==null?void 0:k.resolution)??"Файл"}function w(b){return b?{baseParams:E(b),spatial:{crs:{code:b.srid?`EPSG:${b.srid}`:"EPSG:4326",description:b.proj4||"WGS 84 — World Geodetic System 1984"},bounds:I(b.extent),resolution:q(b)},statistics:R(b),technical:M(b)}:null}function C(b){return b!=null&&b.length?b.map(N=>{var T;if(!N)return"";const B=N.trim().split(/\s+/)[0];return((T=B==null?void 0:B[0])==null?void 0:T.toUpperCase())||""}).filter(Boolean).join(""):""}function E(b){var L,j;const k=b.bands_count??((L=b.bands)==null?void 0:L.length)??"—",N=C(b.bands),B=(b.bands??[]).map(U=>U.trim()).filter(U=>U.length>0),T=B.length?B.join(", "):void 0;return[{label:"Розмір растру, px",value:b.width&&b.height?`${b.width}×${b.height}`:"—"},{label:"Формат файлу",value:((j=b.extension)==null?void 0:j.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:b.total_size?`${b.total_size}`:"—"},{label:"Кількість каналів",value:typeof k=="number"?`${k}${N?` (${N})`:""}`:`${k}${N?` (${N})`:""}`,tooltip:T},{label:"Глибина кольору",value:b.color_depth?`${b.color_depth} біт/канал`:"—"},{label:"Стиснення",value:b.compression||"—"}]}function I(b){return!b||b.length!==4?[]:[{label:"Північ",value:v(b[3],"N")},{label:"Схід",value:v(b[2],"E")},{label:"Південь",value:v(b[1],"S")},{label:"Захід",value:v(b[0],"W")}]}function q(b){const k=[{label:"Роздільна здатність",value:b.resolution||"—"}];return b.width&&b.height&&k.push({label:"Розмір пікселя",value:`${b.width} × ${b.height} px`}),k}function R(b){var k;return(k=b.bands)!=null&&k.length?b.bands.map((N,B)=>{const T=n[B%n.length];return{label:`Канал ${B+1}${N?` (${N})`:""}`,cardClass:T.cardClass,titleClass:T.titleClass,metrics:[{label:"Назва",value:N||`Канал ${B+1}`},{label:"Глибина",value:b.color_depth?`${b.color_depth} біт`:"—"},{label:"Статус",value:b.cache?"Кешовано":"Готово"}]}}):[]}function M(b){var k;return[{label:"Тип даних",value:b.color_depth?`Unsigned Integer ${b.color_depth}-bit`:"—"},{label:"Компресія",value:b.compression||"—"},{label:"Кольорова інтерпретація",value:((k=b.bands)==null?void 0:k.join(", "))||"—"},{label:"SRID",value:b.srid?`EPSG:${b.srid}`:"—"},{label:"Проекція (proj4)",value:b.proj4||"—"},{label:"URL тайла",value:b.url||"—"}]}function v(b,k){if(b==null||Number.isNaN(b))return"—";const N=`${b.toFixed(5)}°`;return k?`${N} ${k}`:N}return(b,k)=>(e.openBlock(),e.createElementBlock("div",xf,[e.createElementVNode("div",bf,[e.createElementVNode("div",kf,[e.createElementVNode("div",wf,[e.createElementVNode("div",_f,[e.createElementVNode("button",{type:"button",onClick:k[0]||(k[0]=N=>e.unref(o).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...k[1]||(k[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",Ef,e.toDisplayString(d.value.name),1),y.value?(e.openBlock(),e.createElementBlock("div",Nf,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:d.value.description},e.toDisplayString(d.value.description),9,Bf)])]),e.createElementVNode("div",Vf,[e.createElementVNode("div",Cf,[e.createVNode(It,null,{default:e.withCtx(()=>[g.value?(e.openBlock(),e.createBlock(hf,{key:c.value,"tile-url":f.value,extent:u.value,"layer-id":x.value},null,8,["tile-url","extent","layer-id"])):e.createCommentVNode("",!0),e.createElementVNode("div",$f,[e.createVNode(Nt)])]),_:1})])])]),e.createElementVNode("div",vf,[e.createElementVNode("div",Sf,[e.createElementVNode("div",Af,[e.createElementVNode("div",Lf,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(m,N=>e.createElementVNode("button",{key:N.key,type:"button",role:"tab","aria-selected":p.value===N.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",p.value===N.key?"bg-white shadow-sm text-gray-700":""]),onClick:B=>p.value=N.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(N.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Ff,e.toDisplayString(N.label),1)],10,Tf)),64))])]),e.createElementVNode("div",Mf,[i.value?(e.openBlock(),e.createElementBlock("div",Df," Завантаження метаданих растру… ")):s.value?(e.openBlock(),e.createElementBlock("div",If," Не вдалося отримати дані: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),p.value==="files"?(e.openBlock(),e.createBlock(af,{key:2,files:_.value},null,8,["files"])):A.value?(e.openBlock(),e.createBlock(nf,{key:3,details:A.value},null,8,["details"])):e.createCommentVNode("",!0)])])])]))}}),zf={},Of={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"};function Pf(t,n){return e.openBlock(),e.createElementBlock("svg",Of,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const Rf=oe(zf,[["render",Pf]]),Uf={class:"flex flex-col h-full"},qf={class:"flex justify-end mb-3 gap-2"},Hf=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.modelValue,set:a=>r("update:modelValue",a)});return(a,i)=>(e.openBlock(),e.createElementBlock("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:i[0]||(i[0]=s=>a.$emit("save"))},[...i[2]||(i[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(Dt,{modelValue:l.value,"onUpdate:modelValue":i[1]||(i[1]=s=>l.value=s),language:"css",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),Wf={class:"flex flex-col flex-1 min-h-0"},Yf={class:"flex justify-between mb-3 gap-2"},Zf={class:"text-left"},Gf={class:"font-medium text-gray-900"},Kf={class:"text-xs text-gray-500"},Xf={class:"flex justify-center gap-2"},Jf=["checked","onChange"],Qf={class:"text-sm font-medium text-gray-900"},e0=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Зум",slot:"zoomCell",width:"140px"}],r={table:{type:"text",label:"Таблиця",validators:["required"]},caption:{type:"text",label:"Підпис",validators:["required"]},active:{type:"switcher",label:"Активний"},zoom:{type:"number",label:"Зум"}},l=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=n,f=e.ref(!1),u=e.ref({table:"",caption:"",zoom:"0-12",active:!0}),x={table:{type:"text",label:"Таблиця",validators:["required"]},caption:{type:"text",label:"Підпис",validators:["required"]},active:{type:"switcher",label:"Активна"},zoom:{type:"text",label:"Зум",placeholder:"0-12"}};function c(){u.value={table:"",caption:"",zoom:"",active:!0},f.value=!0}function g(){f.value=!1}function d(){var p,_;const m=(p=u.value.table)==null?void 0:p.trim(),h=(_=u.value.caption)==null?void 0:_.trim();if(!m||!h){ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...u.value,table:m,caption:h}],f.value=!1}function y(m,h){var _;const p=((_=h==null?void 0:h.target)==null?void 0:_.checked)??!1;m.active=p,i.value=Array.isArray(i.value)?[...i.value]:[]}return(m,h)=>(e.openBlock(),e.createElementBlock("div",Wf,[e.createElementVNode("div",Yf,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500",onClick:c}," Додати таблицю "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:h[0]||(h[0]=p=>s("save"))}," Зберегти ")]),e.createVNode(Ze,{modelValue:i.value,"onUpdate:modelValue":h[1]||(h[1]=p=>i.value=p),"columns-scheme":o,"form-scheme":r,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:p})=>[e.createElementVNode("div",Zf,[e.createElementVNode("div",Gf,e.toDisplayString(p.table),1),e.createElementVNode("div",Kf,e.toDisplayString(p.caption),1)])]),activeCell:e.withCtx(({row:p})=>[e.createElementVNode("label",Xf,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:p.active,onChange:_=>y(p,_)},null,40,Jf)])]),zoomCell:e.withCtx(({row:p})=>[e.createElementVNode("div",Qf,e.toDisplayString(p.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(l),{teleport:"#modal",visible:f.value,"onUpdate:visible":h[3]||(h[3]=p=>f.value=p),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:g},"Скасувати"),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:d},"Додати")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{values:u.value,"onUpdate:values":h[2]||(h[2]=p=>u.value=p),schema:x},null,8,["values"])]),_:1},8,["visible"])]))}}),t0=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:.85}},setup(t){const n=t,o=Se(),{activateTemporaryLayer:r,deactivateTemporaryLayer:l}=yn(o.map),a=e.computed(()=>{var x;const u=`${(x=n==null?void 0:n.tileUrl)==null?void 0:x.trim()}`;return u?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(u)?u:u.startsWith("//")?`${window.location.protocol}${u}`:u.startsWith("/")?`${location.origin}${u}`:`${location.origin}/${u}`:""});let i="",s="";function f(){const u=n.active&&!!a.value;i&&(!u||i!==n.layerId)&&(l(i,s||void 0),i="",s=""),u&&(r({id:n.layerId,title:n.title||n.layerId,url:a.value,opacity:n.opacity},{},n.owner),i=n.layerId,s=n.owner||"")}return e.watch(()=>[n.layerId,a.value,n.active,n.owner],f,{immediate:!0}),e.onUnmounted(()=>{i&&(l(i,s||void 0),i="",s="")}),()=>{}}}),n0={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},o0={class:"flex-1 relative overflow-hidden"},l0={class:"absolute top-0 left-0 w-full z-20"},r0={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},a0={class:"flex items-center gap-3"},i0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},s0={key:0,class:"text-xs text-gray-500 truncate"},c0={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},d0={class:"relative w-full h-full"},u0={class:"absolute top-4 left-4 z-20"},p0={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},m0={class:"flex-1 flex flex-col h-full"},f0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},g0={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},y0=["aria-selected","onClick"],h0={class:"leading-none"},x0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},b0={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},k0="cartocss-demo-001",w0=e.defineComponent({__name:"cartocss",setup(t){const n=he.useRouter(),o=he.useRoute(),r=[{key:"css",label:"CSS",icon:Zo},{key:"data",label:"Дані",icon:Rf}],l=r.map(w=>w.key),a=e.ref(l.includes(o.query.tab)?o.query.tab:"css"),i=e.computed(()=>o.params.id||k0),s=e.ref({id:i.value,name:"",description:""}),f=e.ref(""),u=e.ref([]),x=e.ref(!1),c=e.ref(!1),g=e.ref(""),d=e.ref(0),y=e.ref(!1),m=e.computed(()=>`cartocss-layer-${i.value}`),h=e.ref(null),p=e.computed(()=>{var q;const w=(q=g.value)==null?void 0:q.trim();if(!w)return"";const C=d.value,E=w.includes("?")?"&":"?",I=C?`nocache=1&ts=${C}`:"nocache=1";return`${w}${E}${I}`}),_=e.computed(()=>{const w=h.value;return w?(u.value.map(E=>E==null?void 0:E.table).filter(Boolean),[w.description,w.group_id?`Група: ${w.group_id}`:null,w.is_public===!0?"Публічний":"Не публічний",w.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", ")):""});e.watch(i,w=>{w&&D(w)},{immediate:!0}),e.watch(()=>o.query.tab,w=>{w&&l.includes(w)&&a.value!==w&&(a.value=w)}),e.watch(a,w=>{o.query.tab!==w&&n.replace({query:{...o.query,tab:w}})});function A(w){if(!w)return null;if(typeof w=="string")try{return JSON.parse(w)}catch(C){return console.warn("Failed to parse CartoCSS config",C),null}return typeof w=="object"?w:null}function F(w){const C=Array.isArray(w)?w:w==null?void 0:w.datasets;return Array.isArray(C)?C.map((E,I)=>({table:(E==null?void 0:E.table)||(E==null?void 0:E.id)||`dataset_${I+1}`,caption:(E==null?void 0:E.caption)||(E==null?void 0:E.label)||"Без підпису",active:typeof(E==null?void 0:E.active)=="boolean"?E.active:!0,zoom:typeof(E==null?void 0:E.zoom)>"u"?"0-12":String(E.zoom)})):[]}async function D(w,C){x.value=!0;try{const E=await fetch(`/api/gis-css/${w}`);if(!E.ok)throw new Error(`Failed to load cartocss: ${E.status}`);const I=await E.json(),q=(I==null?void 0:I.message)||I||{};h.value=q,s.value={id:q.cartocss_key||w,name:q.name||s.value.name,description:q.description||s.value.description},f.value=typeof q.style=="string"?q.style:"";const R=A(q.config??[]);u.value=F(R);const M=typeof q.url=="string"?q.url:"";g.value=M,y.value=!!(M&&q.enabled!==!1),d.value=C!=null&&C.bustCache?Date.now():0}catch(E){console.error("Failed to fetch CartoCSS",E),y.value=!1,g.value="",d.value=0,h.value=null}finally{x.value=!1}}async function $(){if(i.value){c.value=!0;try{const w={style:f.value||"",config:u.value},C=await fetch(`/api/gis-css/${i.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)});if(!C.ok)throw new Error(`Failed to save cartocss: ${C.status}`);ce.notify({type:"success",title:"Збережено",message:"CartoCSS оновлено"}),await D(i.value,{bustCache:!0})}catch(w){console.error("Failed to save CartoCSS",w),ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{c.value=!1}}}return(w,C)=>(e.openBlock(),e.createElementBlock("div",n0,[e.createElementVNode("div",o0,[e.createElementVNode("div",l0,[e.createElementVNode("div",r0,[e.createElementVNode("div",a0,[e.createElementVNode("button",{type:"button",onClick:C[0]||(C[0]=E=>e.unref(n).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...C[3]||(C[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",i0,e.toDisplayString(s.value.name),1),_.value?(e.openBlock(),e.createElementBlock("div",s0,e.toDisplayString(_.value),1)):e.createCommentVNode("",!0)])])])]),e.createElementVNode("div",c0,[e.createElementVNode("div",d0,[e.createVNode(It,null,{default:e.withCtx(()=>[e.createElementVNode("div",u0,[e.createVNode(Nt)]),p.value?(e.openBlock(),e.createBlock(t0,{key:0,"layer-id":m.value,"tile-url":p.value,active:y.value,title:s.value.name,owner:i.value},null,8,["layer-id","tile-url","active","title","owner"])):e.createCommentVNode("",!0)]),_:1})])])]),e.createElementVNode("div",p0,[e.createElementVNode("div",m0,[e.createElementVNode("div",f0,[e.createElementVNode("div",g0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,E=>e.createElementVNode("button",{key:E.key,type:"button",role:"tab","aria-selected":a.value===E.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",a.value===E.key?"bg-white shadow-sm text-gray-700":""]),onClick:I=>a.value=E.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(E.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",h0,e.toDisplayString(E.label),1)],10,y0)),64))])]),e.createElementVNode("div",x0,[x.value?(e.openBlock(),e.createElementBlock("div",b0," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[a.value==="css"?(e.openBlock(),e.createBlock(Hf,{key:0,modelValue:f.value,"onUpdate:modelValue":C[1]||(C[1]=E=>f.value=E),class:"flex-1 min-h-0",onSave:$},null,8,["modelValue"])):(e.openBlock(),e.createBlock(e0,{key:1,modelValue:u.value,"onUpdate:modelValue":C[2]||(C[2]=E=>u.value=E),class:"flex-1 min-h-0 flex flex-col",onSave:$},null,8,["modelValue"]))],64))])])])]))}}),_0={class:"w-full mb-6"},E0={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},N0=["onClick"],B0=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,r=l=>{o("update:activeTab",l)};return(l,a)=>(e.openBlock(),e.createElementBlock("div",_0,[e.createElementVNode("div",E0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,i=>(e.openBlock(),e.createElementBlock("button",{key:i.id,onClick:s=>r(i.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",i.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(i.name),11,N0))),128))])]))}}),V0={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},C0=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,l=n,a=e.computed({get:()=>r.modelValue,set:s=>l("update:modelValue",s)}),i=e.computed({get:()=>r.form,set:s=>l("update:form",s)});return(s,f)=>(e.openBlock(),e.createElementBlock("section",V0,[f[2]||(f[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:a.value,"onUpdate:values":f[0]||(f[0]=u=>a.value=u),form:i.value,"onUpdate:form":f[1]||(f[1]=u=>i.value=u)},null,8,["schema","values","form"]))]))}}),$0={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},v0=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},layerNames:{},options:{}},emits:["update:layerIDs","update:layerNames"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.layerIDs,set:a=>r("update:layerIDs",a)});return e.computed({get:()=>o.layerNames,set:a=>r("update:layerNames",a)}),(a,i)=>(e.openBlock(),e.createElementBlock("section",$0,[i[1]||(i[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),i[2]||(i[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(Bn.VsInputArraySelect),{options:t.options,modelValue:l.value,"onUpdate:modelValue":i[0]||(i[0]=s=>l.value=s),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),S0={class:"mapLayer-info__inner"},A0={class:"mapLayer-info__item-label"},xn=oe(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function f(m){if(r.open){g();return}const h=m.currentTarget,p=h==null?void 0:h.closest(".mapLayer-info");if(!p){g();return}l.value=p,r.open=!0,e.nextTick(()=>{u(),d(),requestAnimationFrame(()=>{u()})})}function u(){if(!r.open||!l.value||!a.value)return;const m=l.value.getBoundingClientRect(),h=12,p=window.scrollX+h,_=window.scrollX+window.innerWidth-h,A=window.scrollY+h,F=window.scrollY+window.innerHeight-h,D=a.value.offsetWidth||Math.min(300,window.innerWidth-24),$=a.value.offsetHeight||0;let w=m.left+window.scrollX+(m.width-D)/2;w<p&&(w=p),w+D>_&&(w=Math.max(p,_-D)),r.left=w;let C=m.bottom+window.scrollY+h;C+$>F&&(C=m.top+window.scrollY-$-h,C<A&&(C=Math.max(A,F-$))),C<A&&(C=A),C+$>F&&(C=Math.max(A,F-$)),r.top=C,r.transform="none"}function x(m){var p,_;if(!r.open)return;const h=m.target;(p=l.value)!=null&&p.contains(h)||(_=a.value)!=null&&_.contains(h)||g()}function c(m){m.key==="Escape"&&g()}function g(){y(),r.open=!1,l.value=null,a.value=null}function d(){y(),a.value&&(i=new ResizeObserver(()=>{u()}),i.observe(a.value))}function y(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",u,!0),window.addEventListener("resize",u)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",u,!0),window.removeEventListener("resize",u),y()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>u())},{deep:!0}),n({close:g}),(m,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(f,["prevent","stop"])},[...h[1]||(h[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",S0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,p=>(e.openBlock(),e.createElementBlock("div",{key:p.label,class:"mapLayer-info__item"},[e.createElementVNode("div",A0,e.toDisplayString(p.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":p.breakLine}])},e.toDisplayString(p.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),L0={key:0,class:"map-info__title"},T0={class:"map-info__actions"},F0={key:0,class:"map-info__menu"},M0=["href"],D0=["innerHTML"],ll=oe(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),a=e.ref(null),i=e.ref({top:0,left:0});he.useRouter();const s=e.ref(!0),f=e.ref(!1),u=e.computed(()=>Array.isArray(n.links)?n.links.filter(F=>(F==null?void 0:F.name)&&(F==null?void 0:F.slug)):[]),x=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),c=e.computed(()=>{const F=[];return n.mapName&&F.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&F.push({label:"Опис",value:n.mapDescription,breakLine:!0}),F});function g(F){return F==null?!1:F.replace(/<[^>]*>/g,"").trim().length>0}const d=e.computed(()=>g(n.content)),y=e.computed(()=>d.value);function m(F){F.stopPropagation(),r.value=!r.value}function h(){const F=l.value;if(!F||!a.value)return;const D=F.getBoundingClientRect(),$=12,w=8,C=window.scrollX+$,E=window.scrollX+window.innerWidth-$,I=window.scrollY+$,q=window.scrollY+window.innerHeight-$,R=a.value.offsetWidth||160,M=a.value.offsetHeight||0;let v=D.bottom+window.scrollY+w,b=D.left+window.scrollX;b+R>E&&(b=D.right+window.scrollX-R,b<C&&(b=C)),b<C&&(b=C),v+M>q&&(v=D.top+window.scrollY-M-w,v<I&&(v=Math.max(I,q-M))),v<I&&(v=I),v+M>q&&(v=Math.max(I,q-M)),i.value={top:v,left:b}}function p(F){if(!r.value)return;const D=o.value;if(!D){r.value=!1;return}D.contains(F.target)||(r.value=!1)}e.watch(r,F=>{F?e.nextTick(()=>{h(),requestAnimationFrame(()=>{h()}),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h)}):(window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h))});function _(){s.value=!s.value}function A(){f.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",p,!0),A(),y.value?f.value&&(s.value=!1):s.value=!1,window.addEventListener("resize",A)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",A)}),(F,D)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[t.title||u.value.length||c.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([d.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",L0,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",T0,[u.value.length?(e.openBlock(),e.createElementBlock("div",F0,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:m,"aria-label":"Показати посилання"},[...D[1]||(D[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:a,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(x.value),onClick:D[0]||(D[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,$=>(e.openBlock(),e.createElementBlock("a",{key:$.slug||$.name,href:`/maps/${$.slug}`,class:"map-info__popover-link"},e.toDisplayString($.name),9,M0))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),c.value.length?(e.openBlock(),e.createBlock(xn,{key:1,items:c.value},null,8,["items"])):e.createCommentVNode("",!0),y.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:_,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":s.value})},[...D[2]||(D[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!s.value}]),innerHTML:t.content},null,10,D0)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),I0={class:"opacity-popover__content"},j0={class:"opacity-popover__value"},rl=oe(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),a=e.ref(null),i=e.reactive({top:0,left:0});function s(){var D;const c=(D=a.value)==null?void 0:D.querySelector("button");if(!c||!l.value)return;const g=c.getBoundingClientRect(),d=260,y=l.value.offsetHeight||60,m=8,h=12,p=window.innerWidth,_=window.innerHeight;let A=g.bottom+m+window.scrollY,F=g.left+window.scrollX;F+d>p-h&&(F=p-d-h+window.scrollX),F<h+window.scrollX&&(F=h+window.scrollX),A+y>_+window.scrollY-h&&(A=g.top-y-m+window.scrollY,A<h+window.scrollY&&(A=_-y-h+window.scrollY)),i.top=A,i.left=F}function f(){o.value=!o.value,o.value&&e.nextTick(s)}function u(){var y;const c=ue(n.layerId),g=(r.value??100)/100;if(c!=null&&c.setOpacity){c.setOpacity(g);return}const d=(y=c==null?void 0:c.getLayer)==null?void 0:y.call(c);if(d)switch(d.type){case"raster":c.updatePaint({"raster-opacity":g});break;case"fill":c.updatePaint({"fill-opacity":g});break;case"line":c.updatePaint({"line-opacity":g});break;case"circle":c.updatePaint({"circle-opacity":g});break;case"symbol":c.updatePaint({"icon-opacity":g});break}}function x(c){var d,y;if(!o.value)return;const g=c.target;(d=l.value)!=null&&d.contains(g)||(y=a.value)!=null&&y.contains(g)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",x),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),(c,g)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:a},[e.renderSlot(c.$slots,"trigger",{toggle:f,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(f,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",I0,[g[1]||(g[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":g[0]||(g[0]=d=>r.value=d),class:"opacity-popover__range",onInput:u},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",j0,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),z0={class:"layers-panel"},O0={class:"layers-panel__header"},P0={class:"layers-panel__heading"},R0={class:"layers-panel__title"},U0={key:0,class:"layers-panel__description"},q0={class:"layers-panel__header-actions"},H0={class:"layers-panel__label"},W0={class:"layers-panel__label-row"},Y0=["checked","onChange"],Z0={class:"layers-panel__title-block"},G0=["aria-label"],K0={class:"layers-panel__name"},X0={class:"layers-panel__meta text-slate-500"},J0=["onClick"],Q0={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},eg={key:0,class:"layers-panel__actions"},tg=["innerHTML","onClick"],al="map:temporary-layer-request",ng=e.defineComponent({directives:{tooltip:ce.TooltipDirective},__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),a=e.ref(!1),i=Se(),{temporaryLayers:s,activateTemporaryLayer:f,deactivateTemporaryLayer:u,clearTemporaryLayers:x}=yn(i.map),c=e.computed(()=>{const M=o.layers.map(b=>({...b,isTemporary:!1,owner:null,visible:b.visible!==!1})),v=s.value.map(b=>({id:b.id,name:b.title,visible:r.value[b.id]??!0,actions:[],filters:null,isTemporary:!0,owner:b.owner??null,handle:b.handle??null,card:b.card??null,popup:b.popup??null,style:b.style??null,group_name:null,count:null,holder:null}));return[...M,...v]}),g=e.computed(()=>s.value.length>0),d=n;function y(){var M;for(let v=0;v<o.layers.length;v++){const b=o.layers[v],k=m(b);if(!k)continue;const N=ue(b.id,k),B=b.visible!==!1;r.value[b.id]=B,B||(M=N==null?void 0:N.setVisible)==null||M.call(N,!1)}}function m(M){const v=M.id;if(!v)return null;const b=(M.service||M.service_type||M.type||"").toString().toLowerCase(),k=M.service_url||M.url||null;if(!!k&&(b==="tms"||b==="wmts"||b==="wms"||b==="ogc")){const T=h(k);return T?{sourceId:v,source:{type:"raster",tiles:[T],tileSize:M.tileSize||256,minzoom:M.minzoom??0,maxzoom:M.maxzoom??22,scheme:M.scheme||"xyz"},layer:{id:v,type:"raster",source:v},card:M.card,popup:M.popup}:null}const B=`${location.origin}/api/vtile/${v}/ua/{z}/{x}/{y}.vmt`;return{sourceId:v,source:{type:"vector",tiles:[B],minZoom:4,maxZoom:14},layer:{id:v,source:v,"source-layer":v,style:M.style},card:M.card,popup:M.popup}}function h(M){return M?/^https?:\/\//i.test(M)?M:M.startsWith("//")?`${window.location.protocol}${M}`:M.startsWith("/")?`${location.origin}${M}`:`${location.origin}/${M}`:null}function p(M){const v=r.value[M];return v??!0}function _(M){var k,N;if(!(M!=null&&M.id))return null;const v=(k=M.title)==null?void 0:k.trim(),b=(N=M.url)==null?void 0:N.trim();return!v||!b?null:{id:M.id,title:v,url:b,tileSize:M.tileSize,minzoom:M.minzoom,maxzoom:M.maxzoom,opacity:M.opacity}}function A(M){if(!M)return;const v=M.owner;if(M.action==="clear"){const k=s.value.filter(N=>!v||N.owner===v).map(N=>N.id);x(v),k.forEach(N=>{N in r.value&&delete r.value[N]});return}const b=_(M.spec);if(b){if(M.action==="activate"){f(b,M.context||{},v),r.value[b.id]=!0;return}M.action==="deactivate"&&(u(b.id,v),delete r.value[b.id])}}function F(M){M instanceof CustomEvent&&A(M.detail)}e.watch(()=>s.value.map(M=>M.id),(M,v)=>{const b=new Set(v||[]),k=new Set(M);M.forEach(N=>{N in r.value||(r.value[N]=!0)}),b.forEach(N=>{k.has(N)||delete r.value[N]})},{immediate:!0});function D(M,v){var B,T,L;const k=v.target.checked;if(r.value[M.id]=k,M.isTemporary){if(!k){u(M.id,M.owner||void 0),delete r.value[M.id];return}const j=M.handle||((B=s.value.find(U=>U.id===M.id))==null?void 0:B.handle);(T=j==null?void 0:j.setVisible)==null||T.call(j,!0);return}const N=ue(M.id);(L=N==null?void 0:N.setVisible)==null||L.call(N,k)}function $(M){return M.isTemporary?[{label:"Назва",value:M.name??null},{label:"Тип",value:"Тимчасовий шар"},M.owner?{label:"Джерело",value:M.owner}:null].filter(Boolean):[{label:"Назва",value:M.name??null},{label:"Назва групи",value:M.group_name||null},{label:"Кількість",value:M.count??null},{label:"Балансоутримувач",value:M.holder??null}]}function w(M){var v,b,k;return((v=M==null?void 0:M.style)==null?void 0:v.color)||((b=M==null?void 0:M.style)==null?void 0:b.stroke)||((k=M==null?void 0:M.style)==null?void 0:k.fill)||null}function C(M){var v,b;return((b=(v=M==null?void 0:M.legend)==null?void 0:v[0])==null?void 0:b.name)||null}function E(M){return C(M)||null}function I(){if(!s.value.length)return;const M=s.value.map(v=>v.id);x(),M.forEach(v=>delete r.value[v])}function q(){l.value=!l.value}function R(){a.value=window.innerWidth<=768}return e.onMounted(()=>{y(),window.addEventListener(al,F),R(),a.value&&(l.value=!1),window.addEventListener("resize",R)}),e.onBeforeUnmount(()=>{window.removeEventListener(al,F),window.removeEventListener("resize",R)}),(M,v)=>{var k,N;const b=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",z0,[e.createElementVNode("div",O0,[e.createElementVNode("div",P0,[e.createElementVNode("h2",R0,e.toDisplayString(((k=t.config)==null?void 0:k.title)||"Шари"),1),(N=t.config)!=null&&N.description?(e.openBlock(),e.createElementBlock("div",U0,[e.createElementVNode("p",null,e.toDisplayString(t.config.description),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",q0,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:q,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":l.value})},[...v[0]||(v[0]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0),g.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:I}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,B=>{var T;return e.openBlock(),e.createElementBlock("div",{key:B.id,class:"layers-panel__item"},[e.createElementVNode("label",H0,[e.createElementVNode("div",W0,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:p(B.id),onChange:L=>D(B,L)},null,40,Y0),e.createElementVNode("div",Z0,[p(B.id)&&w(B)&&E(B)?e.withDirectives((e.openBlock(),e.createElementBlock("span",{key:0,class:"layers-panel__legend-dot layers-panel__legend-dot--inline",style:e.normalizeStyle({background:w(B)}),"aria-label":E(B),role:"img"},null,12,G0)),[[b,E(B)]]):p(B.id)&&w(B)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"layers-panel__legend-dot layers-panel__legend-dot--inline",style:e.normalizeStyle({background:w(B)}),role:"img"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",K0,e.toDisplayString(B.name),1)]),e.createElementVNode("div",X0,[p(B.id)&&!B.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(rl,{"layer-id":B.id,class:"flex"},{trigger:e.withCtx(({toggle:L})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(L,["prevent","stop"])},[e.createElementVNode("div",Q0,[e.createVNode(e.unref(Al))])],8,J0)]),_:1},8,["layer-id"]),e.createVNode(jt,{count:Array.isArray(B.filters)?B.filters.length:0,layer:B},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(xn,{items:$(B)},null,8,["items"])])])]),(T=B.actions)!=null&&T.length?(e.openBlock(),e.createElementBlock("div",eg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.actions,L=>(e.openBlock(),e.createElementBlock("button",{key:L.widget||L.id||L.icon,type:"button",class:"layers-panel__action",innerHTML:L.icon,onClick:j=>d("action",{layerId:L.widget})},null,8,tg))),128))])):e.createCommentVNode("",!0)])}),128))],2)])}}}),il=oe(ng,[["__scopeId","data-v-cd741b3d"]]),og={class:"catalog-tab__search relative mt-[10px]"},lg={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-[40%] left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}},rg={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},ag={key:0,class:"text-sm text-gray-400 text-center mt-6"},ig=["onClick"],sg={class:"flex items-center gap-x-3"},cg={class:"max-w-[260px] text-[14px] text-[#4b5563]"},dg={class:"text-xs opacity-60 text-[#4b5563]"},ug={class:"flex items-center cursor-pointer gap-2 flex-1"},pg=["checked","onChange"],mg={class:"text-[13px] text-gray-600 max-w-[260px]"},fg={class:"flex items-center gap-2"},gg=oe(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),a=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),s=e.computed(()=>{const m=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const p=m?h.layers.filter(_=>(typeof _.name=="string"?_.name:"").toLowerCase().includes(m)):h.layers;return{...h,layers:p}}).filter(h=>h.layers.length>0)}),f=e.computed({get:()=>o.search,set:m=>r("update:search",m)});function u(m){l[m]=!l[m],up()}function x(m){return!!l[m]}function c(m,h){if(o.selected.includes(h)){i.visible=!1,i.layerId=null;return}const p=m.currentTarget;if(!p)return;const _=p.getBoundingClientRect(),A=typeof window<"u"?window.scrollX:0,F=typeof window<"u"?window.scrollY:0;i.left=_.left+_.width/2+A,i.top=_.bottom+8+F,i.layerId=h,i.visible=!0}function g(){i.visible=!1,i.layerId=null}function d(m){return[{label:"Назва",value:y(m.name)},{label:"Сервіс",value:y(m.service)},{label:"Посилання",value:y(m.url),breakLine:!0}]}function y(m){return m==null||m===""?null:String(m)}return e.watch(()=>o.selected?o.selected.slice():[],m=>{!i.visible||!i.layerId||m.includes(i.layerId)&&(i.visible=!1,i.layerId=null)}),(m,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:a,class:"catalog-tab"},[e.createElementVNode("div",og,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=p=>f.value=p),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,f.value]]),(e.openBlock(),e.createElementBlock("svg",lg,[...h[1]||(h[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",rg,[s.value.length===0?(e.openBlock(),e.createElementBlock("div",ag," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:_=>u(p.id)},[e.createElementVNode("div",sg,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",x(p.id)?"rotate-90":""])},[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",cg,e.toDisplayString(p.name),1)]),e.createElementVNode("div",dg,e.toDisplayString(p.layers.length),1)],8,ig),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.layers,_=>(e.openBlock(),e.createElementBlock("div",{key:_.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",ug,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(_.id),onChange:A=>m.$emit("toggle-layer",_.id,A.target.checked,_)},null,40,pg),h[3]||(h[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",mg,e.toDisplayString(_.name),1)]),e.createElementVNode("div",fg,[Array.isArray(_.filters)&&_.filters.length?(e.openBlock(),e.createBlock(jt,{key:0,count:_.filters.length,layer:_,disabled:!t.selected.includes(_.id),onMouseenter:A=>c(A,_.id),onMouseleave:g,onFocus:A=>c(A,_.id),onBlur:g},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(xn,{items:d(_)},null,8,["items"])])]))),128))],512),[[e.vShow,x(p.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${i.top}px`,left:`${i.left}px`})},e.toDisplayString(i.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-f68d8bda"]]),yg={class:"flex flex-col gap-0"},hg={class:"text-xs text-slate-600 font-semibold"},xg=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>{if(!r.open)return{display:"none"};const m=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${m}px`,maxWidth:`${m}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function f(){if(r.open){g();return}if(!l.value){g();return}r.open=!0,e.nextTick(()=>{u(),d(),requestAnimationFrame(()=>{u()})})}function u(){if(!r.open||!l.value||!a.value)return;const m=l.value.getBoundingClientRect(),h=12,p=window.scrollX+h,_=window.scrollX+window.innerWidth-h,A=window.scrollY+h,F=window.scrollY+window.innerHeight-h,D=a.value.offsetWidth||Math.min(460,window.innerWidth-24),$=a.value.offsetHeight||0;let w=m.left+window.scrollX+(m.width-D)/2;w<p&&(w=p),w+D>_&&(w=Math.max(p,_-D)),r.left=w;let C=m.bottom+window.scrollY+h;C+$>F&&(C=m.top+window.scrollY-$-h,C<A&&(C=Math.max(A,F-$))),C<A&&(C=A),C+$>F&&(C=Math.max(A,F-$)),r.top=C,r.transform="none"}function x(m){var p,_;if(!r.open)return;const h=m.target;(p=l.value)!=null&&p.contains(h)||(_=a.value)!=null&&_.contains(h)||g()}function c(m){m.key==="Escape"&&g()}function g(){y(),r.open=!1,l.value=null,a.value=null}function d(){y(),a.value&&(i=new ResizeObserver(()=>{u()}),i.observe(a.value))}function y(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",u,!0),window.addEventListener("resize",u)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",u,!0),window.removeEventListener("resize",u),y()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>u())},{deep:!0}),n({close:g}),(m,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(f,["prevent","stop"])},[e.renderSlot(m.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",yg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,p=>(e.openBlock(),e.createElementBlock("div",{key:p.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",hg,e.toDisplayString(p.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":p.breakLine}])},e.toDisplayString(p.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),bg={class:"selected-tab"},kg={class:"selected-tab__actions"},wg={key:0,class:"selected-tab__scroll"},_g=["onDragstart","onDragover","onDrop"],Eg={class:"selected-tab__item-header"},Ng={class:"selected-tab__item-info"},Bg=["checked","onChange"],Vg={class:"selected-tab__item-name"},Cg={class:"selected-tab__item-controls"},$g=["onClick"],vg={class:"selected-tab__menu-inner"},Sg=oe(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),a=e.ref(null),i=e.ref(null),s=new Map,f=e.reactive({top:0,left:0}),u=e.ref(null),x=e.reactive({top:0,left:0}),c=e.ref(null),g=new Map,d=e.reactive({});function y(B){var T;for(const L of((T=o.catalog)==null?void 0:T.groups)??[]){const j=L.layers.find(U=>U.id===B);if(j)return j}return null}e.watch(()=>o.selected,B=>{B.forEach(T=>{l[T]==null&&(l[T]=100)})},{immediate:!0});function m(){if(!a.value)return;const B=s.get(a.value);if(!B)return;const T=B.getBoundingClientRect();f.top=T.bottom+8+window.scrollY,f.left=T.left+window.scrollX}e.watch(()=>o.selected,B=>{B.forEach(T=>{d[T]==null&&(d[T]=!0)})},{immediate:!0});function h(B,T){d[B]=T;const L=ue(B);L&&L.setVisible(T)}function p(B,T){T?g.set(B,T):g.delete(B)}function _(B){u.value=u.value===B?null:B,u.value&&e.nextTick(()=>{A(B),requestAnimationFrame(()=>{A(B)})})}function A(B){const T=g.get(B);if(!T||!c.value)return;const L=T.getBoundingClientRect(),j=12,U=6,Y=window.scrollX+j,re=window.scrollX+window.innerWidth-j,X=window.scrollY+j,ee=window.scrollY+window.innerHeight-j,fe=c.value.offsetWidth||190,pe=c.value.offsetHeight||0;let me=L.bottom+window.scrollY+U,P=L.left+window.scrollX;P+fe>re&&(P=L.right+window.scrollX-fe,P<Y&&(P=Y)),P<Y&&(P=Y),me+pe>ee&&(me=L.top+window.scrollY-pe-U,me<X&&(me=Math.max(X,ee-pe))),me<X&&(me=X),me+pe>ee&&(me=Math.max(X,ee-pe)),x.top=me,x.left=P}function F(B){const T=ue(B);T&&T.remove(),r("remove",B),u.value=null}function D(B){const T=B.target,L=a.value,j=u.value;if(L){const U=i.value,Y=s.get(L);if(U&&U.contains(T)||Y&&Y.contains(T))return;a.value=null}if(j){const U=c.value,Y=g.get(j);if(U&&U.contains(T)||Y&&Y.contains(T))return;u.value=null}}function $(){a.value&&m(),u.value&&A(u.value)}e.onMounted(()=>{document.addEventListener("click",D),window.addEventListener("resize",$),window.addEventListener("scroll",$,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",D),window.removeEventListener("resize",$),window.removeEventListener("scroll",$,!0)});const{map:w}=Se();function C(B){var U,Y,re;if(!B)return;const T=ue(B),L=y(B);if(!T&&!L)return;if(((U=L==null?void 0:L.extent)==null?void 0:U.length)===4&&((Y=w.value)!=null&&Y.fitBounds)){const X=L.extent.map(ee=>Number(ee));if(X.every(ee=>Number.isFinite(ee))){const[ee,fe,pe,me]=X;w.value.fitBounds([[ee,fe],[pe,me]],{padding:40}),u.value=null;return}}(re=T==null?void 0:T.getSource)!=null&&re.call(T)&&(u.value=null)}const E=e.ref(null),I=e.ref(null);function q(B,T){E.value=T,I.value=T,B.dataTransfer&&(B.dataTransfer.effectAllowed="move",B.dataTransfer.setData("text/plain",String(T)))}function R(B){I.value=B}function M(B,T){if(B.preventDefault(),E.value===null||E.value===T){E.value=null,I.value=null;return}const L=[...o.selected],[j]=L.splice(E.value,1);L.splice(T,0,j),r("reorder",L),E.value=null,I.value=null}function v(){E.value=null,I.value=null}function b(B){return B==null||B===""?null:String(B)}function k(B,T){return!Array.isArray(B)||B.length===0?null:`${B.length} ${T}`}function N(B){var me,P,H,W,te,le;const T=ue(B),L=y(B);if(!T&&!L)return[];const j=(L==null?void 0:L.name)||((P=(me=T==null?void 0:T.opts)==null?void 0:me.layer)==null?void 0:P.name)||null,U=(L==null?void 0:L.service)||((H=T==null?void 0:T.opts)==null?void 0:H.service)||null,Y=(W=T==null?void 0:T.getSource)==null?void 0:W.call(T),re=Y&&"tiles"in Y?(te=Y.tiles)==null?void 0:te[0]:(L==null?void 0:L.url)||null,X=(L==null?void 0:L.source_path)||null,ee=(T==null?void 0:T.popup)||(L==null?void 0:L.popup),fe=(T==null?void 0:T.card)||(L==null?void 0:L.card),pe=(L==null?void 0:L.filters)||((le=T==null?void 0:T.opts)==null?void 0:le.filters);return[{label:"Назва",value:b(j)},{label:"Сервіс",value:b(U)},{label:"Посилання",value:b(re),breakLine:!0},{label:"Джерело",value:b(X),breakLine:!0},{label:"Popup",value:k(ee,"полів")},{label:"Картка",value:k(fe,"полів")},{label:"Фільтри",value:k(pe,"фільтрів")}]}return(B,T)=>(e.openBlock(),e.createElementBlock("div",bg,[e.createElementVNode("div",kg,[e.createElementVNode("button",{class:"selected-tab__add",onClick:T[0]||(T[0]=L=>r("select-layer"))},[...T[3]||(T[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),t.selected.length?(e.openBlock(),e.createElementBlock("div",wg,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.selected,(L,j)=>{var U;return e.openBlock(),e.createElementBlock("div",{key:L,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":E.value===j,"selected-tab__item--over":I.value===j}]),draggable:"true",onDragstart:Y=>q(Y,j),onDragover:e.withModifiers(Y=>R(j),["prevent"]),onDrop:Y=>M(Y,j),onDragend:v},[e.createElementVNode("div",Eg,[e.createElementVNode("div",Ng,[T[4]||(T[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:d[L]??!0,onChange:Y=>h(L,Y.target.checked)},null,40,Bg),e.createElementVNode("span",Vg,e.toDisplayString(((U=y(L))==null?void 0:U.name)||"Шар"),1)]),e.createElementVNode("div",Cg,[e.createVNode(rl,{"layer-id":L},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:Y=>p(L,Y),onClick:e.withModifiers(Y=>_(L),["stop"])},[...T[5]||(T[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,$g)])])],42,_g)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:c,class:"selected-tab__menu",style:e.normalizeStyle({top:x.top+"px",left:x.left+"px"})},[e.createElementVNode("div",vg,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:T[1]||(T[1]=L=>C(u.value))},[...T[6]||(T[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),e.createVNode(xg,{items:N(u.value)},{default:e.withCtx(()=>[...T[7]||(T[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)])]),_:1},8,["items"]),T[9]||(T[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:T[2]||(T[2]=L=>F(u.value))},[...T[8]||(T[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-39b6f281"]]),Ag={class:"filter-tab"},Lg={key:0,class:"filter-tab__header"},Tg={class:"filter-tab__title"},Fg={key:1,class:"filter-tab__content rounded-md"},Mg={class:"filter-tab__scroll"},Dg={key:2,class:"filter-tab__empty"},Ig=oe(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,a=e.computed(()=>{var f;return((f=r.layer)==null?void 0:f.filters)??[]}),i=e.computed(()=>a.value.length>0);function s(f){l("change",f.data)}return(f,u)=>(e.openBlock(),e.createElementBlock("div",Ag,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Lg,[e.createElementVNode("div",null,[e.createElementVNode("p",Tg,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Fg,[e.createElementVNode("div",Mg,[e.createVNode(e.unref(o),{view:"vertical",schema:a.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:u[0]||(u[0]=x=>s(x))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",Dg,[...u[1]||(u[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),jg={class:"flex items-center justify-between mb-1"},zg={class:"flex items-center gap-2"},Og={class:"text-lg font-semibold text-gray-800"},Pg={key:0},Rg={key:1,class:"block text-sm font-normal text-gray-500"},Ug={class:"flex items-center gap-2"},qg={class:"flex mb-4 border-b border-gray-200"},Hg={class:"map-catalog-widget__body"},sl=oe(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=he.useRoute(),o=he.useRouter();function r(){const k=n.query["catalog-tab"];return(Array.isArray(k)?k[0]:k)==="selected"?"selected":"catalog"}const l=e.ref(r()),a=e.ref({groups:[]}),i=e.ref([]),s=e.ref(""),{map:f}=Se(),u=e.reactive({}),x=e.ref(null),c=e.ref(!0),g=e.ref(!1);function d(k){return a.value.groups.map(N=>N.layers.find(B=>B.id===k)).find(Boolean)||null}function y(){const k=x.value;if(!k)return;delete u[k];const N=ue(k);N!=null&&N.setFilter&&N.setFilter("")}function m(k,N){const B=ue(k);if(u[k]={...N},!(B!=null&&B.setFilter))return;const T=Object.entries(N).filter(([,L])=>L!=null&&L!=="").map(([L,j])=>`${L}=${j}`);B.setFilter(T.join("|"))}function h(k){const N=x.value;N&&m(N,k)}function p(k){const N=k.url;let B=null;if(N&&(B=N.startsWith("http")?N:`${window.location.origin}${N}`),!B)return null;const T=(k.service||"").toString().toLowerCase(),L=k.count??null;return T&&T!=="vtile"?{service:T,count:L,source:{type:"raster",tiles:[B],tileSize:256,minzoom:0,maxzoom:20}}:{service:T,count:L,source:{type:"vector",tiles:[B],minzoom:0,maxzoom:14},layer:{style:k.style},card:k.card,popup:k.popup}}function _(k,N,B){var U;const T=B??d(k);if(!T)return;const L=p(T);if(!L)return;const j=ue(T.id,L,f);if(j)if(j.setVisible(N),N){if(!i.value.includes(k)&&(i.value.push(k),(U=f.value)!=null&&U.getLayer(k)))try{f.value.moveLayer(k)}catch(Y){console.warn("Cannot move new layer",k,Y)}}else i.value=i.value.filter(Y=>Y!==k),x.value===k&&(y(),x.value=null)}function A(){i.value.forEach(k=>{const N=ue(k);N&&N.setVisible(!1)}),i.value=[]}function F(k){i.value=[...k],e.nextTick(()=>{var L;if(!f.value)return;const N=((L=f.value.getStyle())==null?void 0:L.layers)??[];let B;const T=j=>N.filter(U=>{var Y,re;return(U==null?void 0:U.source)===j||(U==null?void 0:U.id)===j||((re=(Y=U==null?void 0:U.id)==null?void 0:Y.startsWith)==null?void 0:re.call(Y,`${j}`))}).map(U=>U.id);for(let j=k.length-1;j>=0;j-=1){const U=k[j],Y=T(U);Y.length&&(Y.forEach(re=>{var X;if((X=f.value)!=null&&X.getLayer(re))try{f.value.moveLayer(re,B)}catch(ee){console.warn("Cannot move layer",re,ee)}}),B=Y[0])}})}function D(k){!k||!Array.isArray(k.filters)||k.filters.length===0||i.value.includes(k.id)&&(x.value=k.id,u[k.id]||(u[k.id]={}),l.value="filter")}function $(){l.value="catalog"}const w=e.computed(()=>x.value?d(x.value):null),C=e.computed(()=>{const k=x.value;return k?u[k]??{}:{}}),E=e.computed(()=>a.value.groups.reduce((k,N)=>k+N.layers.length,0)),I=e.computed(()=>l.value==="selected"?"Вибрані шари":l.value==="filter"?"Фільтр шарів":"Каталог"),q=e.computed(()=>l.value==="selected"?i.value.length:l.value==="catalog"?E.value:null),R=e.computed(()=>{var k;return l.value==="filter"?((k=w.value)==null?void 0:k.name)??"":""});async function M(){const N=await(await fetch("/api/gis-layer-list")).json(),B=new Map;N.forEach(j=>{const U=j.group_id??"other";B.has(U)||B.set(U,{id:U,name:j.group_name||"Інші шари",layers:[]}),B.get(U).layers.push(j)}),a.value={groups:Array.from(B.values())};const T=n.query.layers;if(!T)return;const L=Array.isArray(T)?T[0]:T;typeof L=="string"&&L.split(",").forEach(j=>{const U=j.trim();if(!U)return;const Y=d(U);Y&&_(U,!0,Y)})}e.watch(x,k=>{!k&&l.value==="filter"&&(l.value="catalog")}),e.watch(w,k=>{!k&&x.value&&(x.value=null)}),e.watch(i,k=>{const N={...n.query};k.length?N.layers=k.join(","):delete N.layers,o.replace({query:N}).catch(()=>{})},{deep:!0});function v(){c.value=!c.value}function b(){g.value=window.innerWidth<=768}return e.onMounted(()=>{M(),b(),g.value&&(c.value=!1),window.addEventListener("resize",b)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",b)}),(k,N)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",q.value>1?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",jg,[e.createElementVNode("div",zg,[N[5]||(N[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",Og,[e.createTextVNode(e.toDisplayString(I.value)+" ",1),q.value!==null?(e.openBlock(),e.createElementBlock("span",Pg,"("+e.toDisplayString(q.value)+")",1)):e.createCommentVNode("",!0),R.value?(e.openBlock(),e.createElementBlock("span",Rg,e.toDisplayString(R.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ug,[e.createElementVNode("button",{onClick:A,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...N[6]||(N[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-0023ade8><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-0023ade8></path><path d="M21 3v5h-5" data-v-0023ade8></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" data-v-0023ade8></path><path d="M8 16H3v5" data-v-0023ade8></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:v,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":c.value})},[...N[7]||(N[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!c.value}])},[e.createElementVNode("div",qg,[e.createElementVNode("button",{onClick:N[0]||(N[0]=B=>l.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:N[1]||(N[1]=B=>l.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Hg,[l.value==="catalog"?(e.openBlock(),e.createBlock(gg,{key:0,class:"map-catalog-widget__scroll",catalog:a.value,selected:i.value,search:s.value,"onUpdate:search":N[2]||(N[2]=B=>s.value=B),onToggleLayer:_,onOpenFilter:D},null,8,["catalog","selected","search"])):l.value==="selected"?(e.openBlock(),e.createBlock(Sg,{key:1,catalog:a.value,selected:i.value,onToggleLayer:_,onSelectLayer:N[3]||(N[3]=B=>l.value="catalog"),onReorder:F,onRemove:N[4]||(N[4]=B=>i.value=i.value.filter(T=>T!==B))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(Ig,{key:2,layer:w.value,value:C.value,onChange:h,onClose:$},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-0023ade8"]]),Wg={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Yg={class:"flex items-start justify-between gap-3 p-5 pb-3"},Zg={class:"inline-block text-xl font-semibold text-gray-800"},Gg={key:0,class:"mt-1 text-sm text-gray-500"},Kg={class:"flex items-center gap-[6px]"},Xg={class:"px-5 pb-5 space-y-6"},Jg={key:0,class:"space-y-2"},Qg={class:"flex flex-wrap gap-4"},ey=["value"],ty={key:1,class:"text-sm text-gray-500"},ny={key:2,class:"text-sm text-gray-500"},oy={class:"text-4xl font-medium text-gray-800"},ly={class:"space-y-[14px]"},ry={class:"flex items-center gap-[10px] text-gray-600"},ay={class:"font-medium text-gray-700"},iy={class:"flex items-center justify-end text-end gap-3"},sy={class:"font-medium text-gray-800"},cy={class:"min-w-[40px] font-medium text-[#3C3C4399]"},cl=oe(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),a=e.ref([]),i=e.ref(null),s=e.ref(null),f=e.ref(null),u=e.ref(null),x=e.ref(null),c=e.ref({}),g=e.ref(null);function d(k){return k&&JSON.parse(JSON.stringify(k))}const y=e.computed(()=>{const k=o.config.layer;if(typeof k!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const N=k.trim();if(!N)throw new Error("MapAttributeWidget: `layer` must be non-empty");return N}),m=e.computed(()=>{const{list:k,attribute:N}=o.config;if(Array.isArray(k)&&k.length)return k.map(B=>({id:(B==null?void 0:B.id)!=null?String(B.id).trim():"",text:(B==null?void 0:B.text)!=null&&String(B.text).trim()||null})).filter(B=>B.id.length);if(Array.isArray(N))return N.map(B=>B!=null?String(B).trim():"").filter(B=>B.length).map(B=>({id:B,text:null}));if(typeof N=="string"){const B=N.trim();if(!B)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:B,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>m.value.map(k=>({id:k.id,label:k.text||c.value[k.id]||k.id})));e.watch(m,k=>{if(!k.length){g.value=null,a.value=[];return}(!g.value||!k.some(N=>N.id===g.value))&&(g.value=k[0].id)},{immediate:!0});const p=e.computed(()=>{var k;return g.value||((k=m.value[0])==null?void 0:k.id)||null});e.watch(y,()=>{var k,N;(N=(k=s.value)==null?void 0:k.remove)==null||N.call(k),s.value=null,f.value=null,u.value=null,x.value=null,c.value={}});const _=e.computed(()=>{var k;return(k=u.value)!=null&&k.length?{id:y.value,name:f.value,filters:u.value}:null}),A=e.computed(()=>{var k,N;return((N=(k=_.value)==null?void 0:k.filters)==null?void 0:N.length)||0});async function F(k){var T;const N=await fetch(`/api/gis-service/${encodeURIComponent(k)}`);if(!N.ok){let L="Не вдалося завантажити налаштування шару";try{const j=await N.json();L=((T=j==null?void 0:j.message)==null?void 0:T.error)||(j==null?void 0:j.message)||L}catch{}throw new Error(L)}const B=await N.json();return f.value=(B==null?void 0:B.name)||null,u.value=Array.isArray(B==null?void 0:B.filters)?B.filters:null,x.value=d((B==null?void 0:B.style)||{}),c.value=((B==null?void 0:B.attributes)||[]).reduce((L,j)=>{const U=typeof(j==null?void 0:j.name)=="string"?j.name.trim():"",Y=typeof(j==null?void 0:j.ua)=="string"?j.ua.trim():"";return U&&(L[U]=Y||U),L},{}),B}function D(k,N){let B=ue(k);if(!B){const T=`${location.origin}/api/vtile/${k}/ua/{z}/{x}/{y}.vmt`;B=ue(k,{source:{type:"vector",tiles:[T],minzoom:0,maxzoom:14},layer:{id:k,source:k,"source-layer":k,style:(N==null?void 0:N.style)||{}},card:N==null?void 0:N.card,popup:N==null?void 0:N.popup})}return s.value=B,B}async function $(k,N){var L;const B=`/api/gis-service/${encodeURIComponent(k)}/${encodeURIComponent(N)}`,T=await fetch(B);if(!T.ok){let j="Не вдалося отримати статистику";try{const U=await T.json();j=((L=U==null?void 0:U.message)==null?void 0:L.error)||(U==null?void 0:U.message)||j}catch{}throw new Error(j)}return T.json()}function w(k){const N=new Map;return k&&(k.rules||[]).forEach(T=>{const L=(T==null?void 0:T.value)??(T==null?void 0:T.id);L!=null&&N.set(String(L),T)}),N}function C(k,N,B,T,L){if(typeof(N==null?void 0:N.color)=="string"&&N.color.trim())return N.color.trim();const j=o.config.colors||{};if(j[k])return j[k];const Y=w(B==null?void 0:B.style).get(k);return typeof(Y==null?void 0:Y.color)=="string"&&Y.color.trim()?Y.color.trim():n[L%n.length]}function E(k,N,B,T){var L;return(N==null?void 0:N.text)||(N==null?void 0:N.label)||(N==null?void 0:N.name)||(N==null?void 0:N[`${T}_text`])||((L=w(B==null?void 0:B.style).get(k))==null?void 0:L.label)||k}function I(k,N,B,T){if(!k)return;const L=d((N==null?void 0:N.style)||x.value)||{},j=T.trim();if(!j)return;const U={...L.colors||{},...o.config.colors||{}};j===T&&B.forEach(Y=>{Y.color.trim()&&(U[Y.id]=Y.color)}),k.setStyle({...L,type:L.type||"polygon",colorAttr:j,opacity:.8,colors:U})}async function q(){var j,U;a.value=[],i.value=null;const k=y.value,N=p.value;if(!N)return;l.value=!0;const B=await F(k);D(k,B);const T=await $(k,N),L=Array.isArray(T==null?void 0:T.rows)?T.rows.map((Y,re)=>{const X=(Y==null?void 0:Y.id)??(Y==null?void 0:Y.value),ee=X!=null?String(X):"";if(!ee)return null;const fe=E(ee,Y,B,N),pe=Number((Y==null?void 0:Y.count)??0)||0,me=C(ee,Y,B,N,re);return{id:ee,label:fe,count:pe,color:me}}).filter(Boolean):[];a.value=L,i.value=((j=T==null?void 0:T.field)==null?void 0:j.label)||((U=T==null?void 0:T.field)==null?void 0:U.name)||null,I(s.value,B,L,N),l.value=!1}e.watch(()=>[y.value,p.value],()=>{q()},{immediate:!0});const R=e.computed(()=>"Набори даних"),M=e.computed(()=>a.value.reduce((k,N)=>k+N.count,0)),v=e.computed(()=>{var B;const k=p.value;return((B=h.value.find(T=>T.id===k))==null?void 0:B.label)||null||i.value||k||null});function b(k){return M.value?`${(k/M.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var k,N;(N=(k=s.value)==null?void 0:k.remove)==null||N.call(k)}),(k,N)=>r.value?(e.openBlock(),e.createElementBlock("div",Wg,[e.createElementVNode("div",Yg,[e.createElementVNode("div",null,[e.createElementVNode("h2",Zg,e.toDisplayString(R.value),1),v.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",Gg,e.toDisplayString(v.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Kg,[_.value?(e.openBlock(),e.createBlock(jt,{key:0,class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",count:A.value,layer:_.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:N[1]||(N[1]=B=>r.value=!1)},[...N[3]||(N[3]=[e.createElementVNode("svg",{class:"w-4 h-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",viewBox:"0 0 24 24"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])]),e.createElementVNode("div",Xg,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",Jg,[e.createElementVNode("div",Qg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,B=>(e.openBlock(),e.createElementBlock("label",{key:B.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:B.id,"onUpdate:modelValue":N[2]||(N[2]=T=>g.value=T)},null,8,ey),[[e.vModelRadio,g.value]]),e.createElementVNode("span",null,e.toDisplayString(B.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",ty,"Завантаження…")):a.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",oy,e.toDisplayString(M.value),1),e.createElementVNode("ul",ly,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,B=>(e.openBlock(),e.createElementBlock("li",{key:B.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",ry,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:B.color})},null,4),e.createElementVNode("span",ay,e.toDisplayString(B.label),1)]),e.createElementVNode("div",iy,[e.createElementVNode("span",sy,e.toDisplayString(B.count),1),e.createElementVNode("span",cy,e.toDisplayString(b(B.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",ny,"Дані відсутні"))])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"py-2 px-2.5 max-h-[38px] inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50",onClick:N[0]||(N[0]=B=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),dy={class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},uy=["title"],py={key:0,class:"vs-select__options absolute z-50 mt-1 w-auto min-w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900"},my=["onClick"],fy=["placeholder"],gy={class:"absolute inset-y-0 right-2 flex items-center gap-1"},yy={class:"divide-y divide-gray-100"},hy=["onClick"],Bt="search-geom-source",Vt="search-geom-layer-fill",zt="search-geom-layer-line",xy=30,by=8,ky="https://data.softpro.ua/api-user/gis-url-proxy",wy="https://geo.rv.ua/api-user/dzk.api",_y="https://nominatim.openstreetmap.org/search",dl=oe(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=Se(),r=e.getCurrentInstance();function l(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var te,le,de;const P=(te=r==null?void 0:r.appContext.config.globalProperties)==null?void 0:te.$settings,H=(le=P==null?void 0:P.map)==null?void 0:le.searchViewbox;if(H)return H;const W=l();return(de=W==null?void 0:W.map)==null?void 0:de.searchViewbox}const s=!!a()?["xy","parcel","address"]:["xy","parcel"],f=e.computed(()=>{var H,W;const P=(W=(H=n.config)==null?void 0:H.tools)==null?void 0:W.filter(te=>s.includes(te));return P&&P.length?P:s}),u=e.computed(()=>{var P,H;return((H=(P=n.config)==null?void 0:P.placeholder)==null?void 0:H.trim())||"Пошук…"}),x=e.ref(f.value[0]);e.watch(f,P=>{P.includes(x.value)||(x.value=P[0])});const c=e.ref(""),g=e.ref(!1),d=e.ref(null),y=e.ref(null),m=e.ref([]),h=e.ref(null),p=e.computed(()=>x.value==="address"&&m.value.length>0),_=e.computed(()=>{var P;return((P=n.config)==null?void 0:P.addressDebounceMs)??1e3});let A=null;const F=e.ref(!1);let D=null;function $(){D&&(D.remove(),D=null)}function w(){var H;const P=(H=o.map)==null?void 0:H.value;P&&(P.getLayer(Vt)&&P.removeLayer(Vt),P.getLayer(zt)&&P.removeLayer(zt),P.getSource(Bt)&&P.removeSource(Bt))}function C(P){var le,de,xe,se;if(!((le=n.config)!=null&&le.showMarker)||!P)return;const H=(de=o.map)==null?void 0:de.value;if(!H)return;w(),I();const W={type:"Feature",geometry:P,properties:{}};H.addSource(Bt,{type:"geojson",data:W});const te=((xe=n.config)==null?void 0:xe.geometryColor)||((se=n.config)==null?void 0:se.markerColor)||"#3B82F6";H.addLayer({id:Vt,type:"fill",source:Bt,paint:{"fill-color":te,"fill-opacity":.3}}),H.addLayer({id:zt,type:"line",source:Bt,paint:{"line-color":te,"line-width":1,"line-opacity":1}}),q(H)}let E=null;function I(){E&&(cancelAnimationFrame(E),E=null)}function q(P){const W=performance.now();function te(le){if(!P.getLayer(Vt))return;const xe=(le-W)%1200/1200,se=Math.sin(xe*Math.PI),Ie=.2+se*.3,z=1+se*1;P.setPaintProperty(Vt,"fill-opacity",Ie),P.setPaintProperty(zt,"line-width",z),E=requestAnimationFrame(te)}E=requestAnimationFrame(te)}function R(P,H){var le,de,xe;if(!((le=n.config)!=null&&le.showMarker))return;$(),w();const W=(de=o.map)==null?void 0:de.value;if(!W)return;if(H){C(H);return}const te=((xe=n.config)==null?void 0:xe.markerColor)||"#3B82F6";D=new maplibregl.Marker({color:te}).setLngLat([P.lng,P.lat]).addTo(W)}const M=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function v(){if(!y.value)return;const P=y.value.getBoundingClientRect(),H=P.width+xy,W=P.left+window.scrollX,te=P.bottom+window.scrollY+by;M.left=`${W}px`,M.top=`${te}px`,M.width=`${H}px`,M.display="block"}const b=()=>{p.value&&v()};function k(){A&&(clearTimeout(A),A=null)}e.watch(x,()=>{c.value="",g.value=!1,m.value=[],k(),F.value=!1,$(),w()}),e.watch(p,P=>{P?e.nextTick(()=>{v()}):M.display="none"}),e.watch(c,P=>{if(x.value!=="address"){m.value=[],k();return}if(!P.trim()){m.value=[],k();return}k(),A=window.setTimeout(()=>{X(P).catch(H=>{const W=(H==null?void 0:H.message)||"Помилка пошуку адреси";ce.notify({type:"error",title:"Пошук адреси",message:W})})},_.value)});function N(P){x.value=P}function B(){c.value="",m.value=[],F.value=!1,$(),w()}function T(P){const H=P.target;if(g.value){const W=d.value;W&&!W.contains(H)&&(g.value=!1)}if(p.value){const W=h.value;W&&!W.contains(H)&&(m.value=[])}}e.onMounted(()=>{window.addEventListener("click",T,!0),window.addEventListener("scroll",b,!0),window.addEventListener("resize",b)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",T,!0),window.removeEventListener("scroll",b,!0),window.removeEventListener("resize",b),k(),$(),w()});function L(P){return P==="xy"?"Координати":P==="parcel"?"Кадастр":"Адреси"}function j(P){const H=P.replace(/[,]+/g," ").trim();if(!H)return null;const W=H.split(/\s+/).filter(Boolean);if(W.length<2)return null;const te=W.slice(0,2).map(Number);if(!te.every(Z=>Number.isFinite(Z)))return null;let[le,de]=te,xe=le,se=de;const Ie=Z=>Math.abs(Z)<=90,z=Z=>Math.abs(Z)<=180;if(!Ie(xe)||!z(se))if(Ie(se)&&z(xe))xe=de,se=le;else return null;return{lat:xe,lng:se}}function U(P){return((P==null?void 0:P.items)||[]).map((W,te)=>{var le,de,xe;return{id:String((W==null?void 0:W.id)??te),title:(W==null?void 0:W.title)||((le=W==null?void 0:W.address)==null?void 0:le.label)||"Знайдений обʼєкт",lat:Number((de=W==null?void 0:W.position)==null?void 0:de.lat),lng:Number((xe=W==null?void 0:W.position)==null?void 0:xe.lng)}})}function Y(P){const H=(P==null?void 0:P.result)||(P==null?void 0:P.data)||P;if(!H)return[];const W=H.geom_centroid;if(!W||!Array.isArray(W.coordinates))return[];const[te,le]=W.coordinates;return!Number.isFinite(le)||!Number.isFinite(te)?[]:[{id:"parcel",title:H.cadnum||H.cad_num||"Земельна ділянка",lat:le,lng:te,geom:H.geom||null}]}function re(P){return(Array.isArray(P==null?void 0:P.features)?P.features:[]).map((W,te)=>{var Z,ae,be;const le=(Z=W==null?void 0:W.geometry)==null?void 0:Z.coordinates,de=Number(le==null?void 0:le[0]),xe=Number(le==null?void 0:le[1]);if(!Number.isFinite(xe)||!Number.isFinite(de))return null;const se=(W==null?void 0:W.properties)||{},Ie=((ae=se==null?void 0:se.geocoding)==null?void 0:ae.label)||(se==null?void 0:se.display_name)||(se==null?void 0:se.label)||"Адреса";return{id:String(((be=se==null?void 0:se.geocoding)==null?void 0:be.place_id)||(se==null?void 0:se.place_id)||te),title:Ie,lat:xe,lng:de}}).filter(W=>!!W)}async function X(P){m.value=[],k();const H=new URL(_y);H.searchParams.set("format","geojson"),H.searchParams.set("q",P),H.searchParams.set("addressdetails","1"),H.searchParams.set("bounded","1");const W=a();W&&H.searchParams.set("viewbox",W);const te=await fetch(H.toString());if(!te.ok)throw new Error(`HTTP ${te.status}`);const le=await te.json(),de=re(le);if(!de.length){ce.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}m.value=de}function ee(P){pe(P),m.value=[],c.value=P.title}function fe(P){const W=P.replace(/\s+/g,"").split(":");if(console.log(W),W.length!==4)return!1;const te=[10,2,3,4];return W.every((le,de)=>le.length===te[de]&&/^\d+$/.test(le))}function pe(P){var W,te;const H=((W=n.config)==null?void 0:W.zoom)??17;(te=o.flyTo)==null||te.call(o,{center:[P.lng,P.lat],zoom:H}),R(P,P.geom),F.value=!0}async function me(){const P=c.value.trim();if(P){if(x.value==="xy"){const H=j(P);if(!H){ce.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}pe(H);return}if(x.value==="address"){try{await X(P)}catch(H){const W=(H==null?void 0:H.message)||"Помилка пошуку адреси";ce.notify({type:"error",title:"Пошук адреси",message:W})}return}try{const H=new URL(x.value==="here"?ky:wy);if(x.value==="here")H.searchParams.set("searchtext",P);else{if(!fe(P)){ce.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}H.searchParams.set("cad_num",P)}const W=await fetch(H.toString());if(!W.ok)throw new Error(`HTTP ${W.status}`);const te=await W.json(),le=x.value==="here"?U(te):Y(te);if(!le.length)ce.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const de=le[0];pe(de)}}catch(H){const W=(H==null?void 0:H.message)||"Помилка пошуку";ce.notify({type:"error",title:"Пошук",message:W})}}}return(P,H)=>(e.openBlock(),e.createElementBlock("div",dy,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(me,["prevent"])},[f.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:d,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:H[0]||(H[0]=W=>g.value=!g.value)},[e.createElementVNode("span",{class:"block w-full truncate",title:L(x.value)},e.toDisplayString(L(x.value)),9,uy),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":g.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...H[3]||(H[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),g.value?(e.openBlock(),e.createElementBlock("div",py,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,W=>(e.openBlock(),e.createElementBlock("li",{key:W,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:te=>N(W)},e.toDisplayString(L(W)),9,my))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:y,class:"relative flex-1 min-w-[140px]"},[x.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Bn.VsInputMask),{key:0,modelValue:c.value,"onUpdate:modelValue":H[1]||(H[1]=W=>c.value=W),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",F.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":H[2]||(H[2]=W=>c.value=W),placeholder:u.value,type:"text",class:e.normalizeClass(["vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",F.value?"!pr-14":"!pr-8"])},null,10,fy)),[[e.vModelText,c.value,void 0,{trim:!0}]]),e.createElementVNode("div",gy,[F.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:B},[...H[4]||(H[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})],-1)])])):e.createCommentVNode("",!0),H[5]||(H[5]=e.createElementVNode("button",{type:"submit",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Пошук"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-4.35-4.35m0 0A7.5 7.5 0 1 0 5 5a7.5 7.5 0 0 0 11.65 11.65Z"})])],-1))]),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:h,class:"vs-select__options mt-1 bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900 z-50 max-h-60 overflow-auto",style:e.normalizeStyle(M)},[e.createElementVNode("ul",yy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,W=>(e.openBlock(),e.createElementBlock("li",{key:W.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:te=>ee(W)},e.toDisplayString(W.title),9,hy))),128))])],4)])):e.createCommentVNode("",!0)],512)],32)]))}}),[["__scopeId","data-v-d773179e"]]),Ey="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Ny="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",By=oe(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Se(),a=e.ref(null),i=e.ref(null),s=e.ref(null),f=e.ref(null);let u=null;function x(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function c($){if(Array.from(document.styleSheets).some(E=>{var I;return(I=E==null?void 0:E.href)==null?void 0:I.includes($)}))return;const C=document.createElement("link");C.rel="stylesheet",C.href=$,document.head.appendChild(C)}function g($){return new Promise((w,C)=>{const E=Array.from(document.scripts).find(q=>q.src===$);if(E){if(E._loaded)return w();E.addEventListener("load",()=>w()),E.addEventListener("error",()=>C(new Error(`Failed ${$}`)));return}const I=document.createElement("script");I.src=$,I.async=!0,I.onload=()=>{I._loaded=!0,w()},I.onerror=()=>C(new Error(`Failed ${$}`)),document.head.appendChild(I)})}function d(){var w,C,E;const $=window;return $.MapboxExportControl||((w=$.mapboxgl)==null?void 0:w.MapboxExportControl)||((C=$.mapboxglExport)==null?void 0:C.MapboxExportControl)||((E=$.mapboxglExport)==null?void 0:E.default)||null}function y(){const $=document.createElementNS("http://www.w3.org/2000/svg","svg");return $.setAttribute("xmlns","http://www.w3.org/2000/svg"),$.setAttribute("viewBox","0 0 24 24"),$.setAttribute("width","18"),$.setAttribute("height","18"),$.setAttribute("fill","none"),$.setAttribute("stroke","currentColor"),$.setAttribute("stroke-width","2"),$.setAttribute("stroke-linecap","round"),$.setAttribute("stroke-linejoin","round"),$.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((C,E)=>{const I=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(C).forEach(([q,R])=>{I.setAttribute(q,R)}),$.appendChild(I)}),$}function m(){const $=document.createElement("button");$.id="print-btn",$.type="button",$.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),$.setAttribute("aria-label","Друк карти");const w=y(),C=document.createElement("span");return C.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),C.textContent="Друк карти",C.setAttribute("aria-hidden","true"),$.appendChild(w),$.appendChild(C),$.addEventListener("click",E=>{E.stopPropagation(),h()}),f.value=$,$}function h(){if(!s.value)return;s.value.style.display==="block"?_():p()}function p(){var $,w,C;s.value&&(s.value.style.display="block",($=f.value)==null||$.classList.add("scale-105","shadow-xl"),(w=i.value)==null||w.toggleCrosshair(!0),(C=i.value)==null||C.togglePrintableArea(!0),document.addEventListener("click",A))}function _(){var $,w,C;s.value&&(s.value.style.display="none",($=f.value)==null||$.classList.remove("scale-105","shadow-xl"),(w=i.value)==null||w.toggleCrosshair(!1),(C=i.value)==null||C.togglePrintableArea(!1),document.removeEventListener("click",A))}function A($){const w=a.value;w&&($.target&&w.contains($.target)||_())}function F($){const w={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};$.querySelectorAll("label, option").forEach(E=>{var q;const I=(q=E.textContent)==null?void 0:q.trim();I&&w[I]&&(E.textContent=w[I])});const C=$.querySelector("button");C&&(C.textContent="Друкувати")}function D($){const w=$.querySelector(".mapboxgl-export-list");if(!w||!a.value)return;s.value=w;const C=$.querySelector("button");if(C&&(C.style.display="none"),$.style.display="none",!f.value){const I=m();a.value.appendChild(I)}w.style.display="none";const E="_printControlBound";if(!w[E]){const I=q=>q.stopPropagation();w.addEventListener("click",I),w.addEventListener("mousedown",I),w[E]=!0}a.value.appendChild(w),F(w)}return e.onMounted(async()=>{await(o==null?void 0:o());const $=n.value;if(!$)return;c(Ey),x();try{await g(Ny)}catch(E){console.warn("[MapPrintControl] load error",E);return}const w=d();if(!w)return;const C=new w({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=C,typeof C.onAdd=="function"){const E=C.onAdd.bind(C);C.onAdd=I=>{const q=E(I);return setTimeout(()=>q&&D(q),50),q}}r?r(C,"top-right"):$.addControl(C,"top-right"),u=E=>{E.key==="Escape"&&_()},document.addEventListener("keyup",u)}),e.onBeforeUnmount(()=>{_(),u&&(document.removeEventListener("keyup",u),u=null);const $=n.value;if(i.value)try{l?l(i.value):$==null||$.removeControl(i.value)}catch{}i.value=null}),($,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:a,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),Vy={class:"cursor-coordinates"},Cy={class:"cursor-coordinates__text"},$y=oe(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Vy,[e.createElementVNode("span",Cy,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),vy={class:"minimap__wrapper"},Ot="minimap-viewport",Sy="minimap-viewport-layer",Ay=oe(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var A,F,D,$;const n=t,o=((F=(A=e.getCurrentInstance())==null?void 0:A.appContext.config.globalProperties)==null?void 0:F.$settings)||null,r=ft((D=o==null?void 0:o.map)==null?void 0:D.center)||[30,50],l=e.ref(null),a=e.shallowRef(null),i=($=n.options)==null?void 0:$.active,s=e.ref(i===void 0?!1:!!i);function f(w,C){return typeof w=="number"&&Number.isFinite(w)?w:C}const u=e.computed(()=>{var q,R;const w=(q=n.options)==null?void 0:q.width,C=(R=n.options)==null?void 0:R.height,E=f(n.width??w,210),I=f(n.height??C,150);return{width:`${E}px`,height:`${I}px`}});function x(){var C,E;const w=(E=(C=n.mapContext)==null?void 0:C.map)==null?void 0:E.value;if(!w||typeof w.getStyle!="function")return null;try{const I=w.getStyle();return I?JSON.parse(JSON.stringify(I)):null}catch{return null}}let c=null;function g(){var q;if(typeof window>"u"||a.value||!l.value)return;const w=x(),C=r,E={container:l.value,style:w??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:C,zoom:((q=n.options)==null?void 0:q.zoom)??3,interactive:!1,attributionControl:!1},I={...E,...n.options??{}};I.container=E.container,a.value=new maplibregl.Map(I),a.value.on("load",()=>{y(),h()})}function d(){if(!a.value)return;const w=x();w&&(a.value.once("styledata",()=>{y(),h()}),a.value.setStyle(w))}function y(){if(a.value){if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{y(),h()});return}a.value.getSource(Ot)||(a.value.addSource(Ot,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),a.value.addLayer({id:Sy,type:"fill",source:Ot,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function m(){s.value=!s.value,s.value&&e.nextTick(()=>{var w;return(w=a.value)==null?void 0:w.resize()})}function h(){var M,v;const w=(v=(M=n.mapContext)==null?void 0:M.map)==null?void 0:v.value;if(!a.value||!w||!w.getBounds)return;if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{h()});return}const C=w.getBounds();if(!C)return;const E=C.getNorthEast(),I=C.getSouthWest();if(!E||!I)return;const q=[[I.lng,E.lat],[E.lng,E.lat],[E.lng,I.lat],[I.lng,I.lat],[I.lng,E.lat]],R=a.value.getSource(Ot);if(!R){y();return}R.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[q]},properties:{}})}function p(){var E;const w=n.mapContext,C=(E=w==null?void 0:w.map)==null?void 0:E.value;!(w!=null&&w.on)||!C||(c==null||c(),c=w.on("move",h),h())}async function _(){const w=n.mapContext;if(w){if(typeof w.ready=="function")try{await w.ready()}catch{return}p()}}return e.onMounted(()=>{g(),_()}),e.watch(()=>n.mapContext,()=>{_(),h()}),e.watch(()=>{var w,C;return(C=(w=n.mapContext)==null?void 0:w.map)==null?void 0:C.value},()=>{a.value&&(d(),_())}),e.watch(u,()=>{a.value&&e.nextTick(()=>{var w;return(w=a.value)==null?void 0:w.resize()})}),e.watch(()=>n.options,()=>{var C;c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null);const w=(C=n.options)==null?void 0:C.active;typeof w=="boolean"&&(s.value=w),e.nextTick(()=>{g(),_()})},{deep:!0}),e.onBeforeUnmount(()=>{c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null)}),(w,C)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":s.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:m},[e.createVNode(e.unref(Vl))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",vy,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(u.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,s.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Ly={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Ty={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Fy={class:"map-widget__overlay-grid"},My={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Dy={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Iy={class:"map-widget__stack"},jy={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},zy={class:"map-widget__stack map-widget__stack--bottom"},Oy={key:0,class:"map-widget__state"},Py={key:1,class:"map-widget__state map-widget__state--error"},Pt=oe(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var de,xe,se,Ie;const n=t,o=he.useRoute(),r=he.useRouter(),l=e.ref(null),a=e.ref({}),i=e.ref(null),s=e.ref(!1),f=e.ref(null),u=e.ref(!1),x=e.ref([]),c=e.computed(()=>n.id||"main"),g=e.computed(()=>{var z,Z;return{height:((z=n.height)==null?void 0:z.trim())||((Z=a.value)==null?void 0:Z.height)||"calc(100vh - 65px)"}}),d=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.name)??null}),y=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.description)??null}),m=e.computed(()=>{var z;return M((z=a.value)==null?void 0:z.maps)}),h=e.computed(()=>{var Z,ae;const z=((Z=a.value)==null?void 0:Z.minZoom)??((ae=a.value)==null?void 0:ae.minzoom)??null;return typeof z=="number"?z:null}),p=e.computed(()=>{var Z,ae;const z=((Z=a.value)==null?void 0:Z.maxZoom)??((ae=a.value)==null?void 0:ae.maxzoom)??null;return typeof z=="number"?z:typeof n.maxZoom=="number"?n.maxZoom:20}),_=e.ref(null),A=e.computed(()=>{if(!_.value)return null;const{lng:z,lat:Z}=_.value;return`${Z.toFixed(6)}, ${z.toFixed(6)}`}),F=e.computed(()=>{var z;return((z=l.value)==null?void 0:z.ctx)??null}),D=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.minimap)??null});function $(z){if(!z||typeof z!="object")return z;const Z=ft(z.center);return Z?{...z,center:Z}:z}const w=((xe=(de=e.getCurrentInstance())==null?void 0:de.appContext.config.globalProperties)==null?void 0:xe.$settings)||null;function C(z){if(z==null)return null;const Z=Number(typeof z=="string"?z.trim():z);return Number.isFinite(Z)?Z:null}const E=ft((se=w==null?void 0:w.map)==null?void 0:se.center),I=C((Ie=w==null?void 0:w.map)==null?void 0:Ie.zoom),q=e.computed(()=>{const z=(w==null?void 0:w.map)||null,Z=(z==null?void 0:z.boundary)??null,ae=(z==null?void 0:z.katottg)??null;return!Z&&!ae?null:{boundary:Z,katottg:ae}});function R(z){return typeof z=="string"&&z.trim()?z.trim().toLowerCase():"top-left"}function M(z){return Array.isArray(z)?z:z&&typeof z=="object"?Object.values(z).filter(Boolean):[]}const v=e.computed(()=>{var z;return M((z=a.value)==null?void 0:z.widgets)}),b=["left","right"],k=e.computed(()=>{const z={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},Z={"top-left":{side:"left",align:"top"},"bottom-left":{side:"left",align:"bottom"},"top-right":{side:"right",align:"top"},"bottom-right":{side:"right",align:"bottom"}};return v.value.forEach(ae=>{const be=R(ae.position),Q=Z[be]??{side:"left",align:"top"};z[Q.side][Q.align].push(ae)}),z});function N(z){return Array.isArray(z)?z[0]??null:typeof z=="string"?z:null}async function B(){var Z;await e.nextTick();const z=(Z=l.value)==null?void 0:Z.ctx;return z?(z.ready&&await z.ready(),z):null}function T(){var z,Z,ae;return((ae=(Z=(z=l.value)==null?void 0:z.ctx)==null?void 0:Z.map)==null?void 0:ae.value)??null}function L(){const z=T();if(!z)return null;const Z=z.getCenter();return{z:z.getZoom().toFixed(2),x:Z.lng.toFixed(5),y:Z.lat.toFixed(5)}}async function j(){var ae;const z=await B(),Z=(ae=z==null?void 0:z.map)==null?void 0:ae.value;Z&&(typeof h.value=="number"&&Z.setMinZoom(h.value),typeof p.value=="number"&&Z.setMaxZoom(p.value))}async function U(){var Q;if(i.value)return;const z=await B(),Z=(Q=z==null?void 0:z.map)==null?void 0:Q.value;if(!Z)return;const ae=Z.getCenter(),be=Z.getZoom();i.value={center:[ae.lng,ae.lat],zoom:be}}function Y(){const z=L();if(!z)return;const Z=N(o.query.x),ae=N(o.query.y),be=N(o.query.z);Z===z.x&&ae===z.y&&be===z.z||r.replace({query:{...o.query,...z}}).catch(()=>{})}function re(z,Z,ae=1e-6){return Math.abs(z-Z)<=ae}async function X(){var Te;const z=await B(),Z=(Te=z==null?void 0:z.map)==null?void 0:Te.value;if(!z||!Z)return;const ae=parseFloat(N(o.query.x)??""),be=parseFloat(N(o.query.y)??""),Q=parseFloat(N(o.query.z)??""),ge=!Number.isNaN(ae),Le=!Number.isNaN(be),K=!Number.isNaN(Q);let $e=!1;if(ge&&Le){const Re=Z.getCenter();(!re(Re.lng,ae)||!re(Re.lat,be))&&(Z.setCenter([ae,be]),$e=!0)}K&&Z.setZoom(Q),(!ge||!Le||!K||$e)&&Y()}let ee=null,fe=null;function pe(z){const Z=z==null?void 0:z.lngLat;Z&&(_.value={lng:Z.lng,lat:Z.lat})}async function me(){const z=await B();z!=null&&z.on&&(ee==null||ee(),ee=z.on("moveend",Y),fe==null||fe(),fe=z.on("mousemove",pe))}e.onUnmounted(()=>{ee==null||ee(),ee=null,fe==null||fe(),fe=null});async function P(z=!1){var ae,be;u.value=!1,f.value=null,_.value=null;const Z=z||!n.data;s.value=Z;try{const Q=Z?await(async()=>{const Te=await fetch(`/api/gis-map/${encodeURIComponent(c.value)}`);if(!Te.ok)throw new Error(`Помилка завантаження (${Te.status})`);return Te.json()})():n.data;Z||(u.value=!0);const ge=ft(Q.center)??E,Le=M(Q.layers).map(Te=>$(Te)),K=C(Q.zoom)??I;a.value={...Q,center:ge??null,zoom:K??Q.zoom??null,layers:Le,widgets:Q.widgets},x.value=Q.tools||["home","print"];const $e=await B();$e&&(ge&&((ae=$e.setCenter)==null||ae.call($e,ge)),K!=null&&((be=$e.setZoom)==null||be.call($e,K)),i.value||await U()),await j(),await X(),await me(),u.value=!0}catch(Q){f.value=(Q==null?void 0:Q.message)||"Не вдалося завантажити карту"}finally{Z&&(s.value=!1)}}const H=e.computed(()=>{var be;const z=new Map;return M((be=a.value)==null?void 0:be.layers).forEach(Q=>{if(!(Q!=null&&Q.id))return;const ge=$(Q)||Q;z.set(Q.id,{...ge})}),v.value.filter(Q=>(Q==null?void 0:Q.type)==="layers").flatMap(Q=>{var ge;return M((ge=Q==null?void 0:Q.config)==null?void 0:ge.layers)}).forEach(Q=>{if(!(Q!=null&&Q.id))return;const ge=z.get(Q.id)||{},Le=$(Q)||Q;z.set(Q.id,{...ge,...Le,actions:Q.actions||ge.actions||null,name:ge.name||Q.name||Q.title||ge.title||Q.id,title:ge.title||Q.title||ge.name||null,visible:ge.visible??Q.visible??!0})}),Array.from(z.values())}),W=e.ref([]);function te(z){W.value.includes(z)?W.value=W.value.filter(Z=>Z!==z):W.value.push(z)}const le=e.computed(()=>z=>W.value.includes(z.id));return e.watch([h,p],()=>{j()},{immediate:!0}),e.watch(c,()=>{P(!0)}),e.watch(()=>n.data,z=>{z&&P()}),e.onMounted(()=>{P()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{X()}),(z,Z)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(g.value)},[Z[2]||(Z[2]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(It,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var ae,be,Q,ge;return[q.value?(e.openBlock(),e.createBlock(ol,{key:0,"layer-id":"app-boundary",boundary:q.value.boundary,katottg:q.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),F.value?(e.openBlock(),e.createElementBlock("div",Ly,[A.value?(e.openBlock(),e.createBlock($y,{key:0,coordinates:A.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(Ay,{"map-context":F.value,options:D.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Ty,[x.value.includes("home")?(e.openBlock(),e.createBlock(hn,{key:0,center:((ae=a.value)==null?void 0:ae.center)||((be=i.value)==null?void 0:be.center)||null,zoom:((Q=a.value)==null?void 0:Q.zoom)??((ge=i.value)==null?void 0:ge.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),x.value.includes("print")?(e.openBlock(),e.createBlock(By,{key:1})):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Fy,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(b,Le=>e.createElementVNode("div",{key:Le,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Le}`])},[Le==="left"?(e.openBlock(),e.createElementBlock("div",My)):e.createCommentVNode("",!0),k.value[Le].top.length?(e.openBlock(),e.createElementBlock("div",Dy,[e.createElementVNode("div",Iy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value[Le].top,K=>{var $e,Te,Re,He,Je,Qe,We,Ue;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:K.id||K.type,class:"map-overlay__item"},[K.type==="info"?(e.openBlock(),e.createBlock(ll,{key:0,title:(($e=K.config)==null?void 0:$e.title)||K.title||null,content:((Te=K.config)==null?void 0:Te.content)||"",links:m.value,"map-name":d.value,"map-description":y.value},null,8,["title","content","links","map-name","map-description"])):K.type==="catalog"?(e.openBlock(),e.createBlock(sl,{key:1,api:((Re=K.config)==null?void 0:Re.api)||null},null,8,["api"])):K.type==="layers"?(e.openBlock(),e.createBlock(il,{key:2,layers:H.value,onAction:Z[0]||(Z[0]=nt=>te(nt.layerId)),config:K.config},null,8,["layers","config"])):K.type==="basemaps"?(e.openBlock(),e.createBlock(Nt,{key:3,layers:((He=K.config)==null?void 0:He.layers)||null,"default-layer":((Je=K.config)==null?void 0:Je.default)||null,title:K.title||((Qe=K.config)==null?void 0:Qe.title)||null},null,8,["layers","default-layer","title"])):K.type==="legend"?(e.openBlock(),e.createBlock(mn,{key:4,items:((We=K.config)==null?void 0:We.items)||[]},null,8,["items"])):K.type==="filters"&&le.value(K)?(e.openBlock(),e.createBlock(pn,{key:5,"layer-id":(Ue=K.config)==null?void 0:Ue.layer,onClose:te},null,8,["layer-id"])):K.type==="dataset"||K.type==="attribute"?(e.openBlock(),e.createBlock(cl,{key:6,config:K.config},null,8,["config"])):K.type==="search"?(e.openBlock(),e.createBlock(dl,{key:7,config:K.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,K.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),k.value[Le].bottom.length?(e.openBlock(),e.createElementBlock("div",jy,[e.createElementVNode("div",zy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value[Le].bottom,K=>{var $e,Te,Re,He,Je,Qe,We,Ue;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:K.id||K.type,class:"map-overlay__item"},[K.type==="info"?(e.openBlock(),e.createBlock(ll,{key:0,title:(($e=K.config)==null?void 0:$e.title)||K.title||null,content:((Te=K.config)==null?void 0:Te.content)||"",links:m.value,"map-name":d.value,"map-description":y.value},null,8,["title","content","links","map-name","map-description"])):K.type==="catalog"?(e.openBlock(),e.createBlock(sl,{key:1,api:((Re=K.config)==null?void 0:Re.api)||null},null,8,["api"])):K.type==="layers"?(e.openBlock(),e.createBlock(il,{key:2,layers:H.value,onAction:Z[1]||(Z[1]=nt=>te(nt.layerId)),config:K.config},null,8,["layers","config"])):K.type==="basemaps"?(e.openBlock(),e.createBlock(Nt,{key:3,layers:((He=K.config)==null?void 0:He.layers)||null,"default-layer":((Je=K.config)==null?void 0:Je.default)||null,title:K.title||((Qe=K.config)==null?void 0:Qe.title)||null},null,8,["layers","default-layer","title"])):K.type==="legend"?(e.openBlock(),e.createBlock(mn,{key:4,items:((We=K.config)==null?void 0:We.items)||[]},null,8,["items"])):K.type==="filters"&&le.value(K)?(e.openBlock(),e.createBlock(pn,{key:5,"layer-id":(Ue=K.config)==null?void 0:Ue.layer,onClose:te},null,8,["layer-id"])):K.type==="dataset"||K.type==="attribute"?(e.openBlock(),e.createBlock(cl,{key:6,config:K.config},null,8,["config"])):K.type==="search"?(e.openBlock(),e.createBlock(dl,{key:7,config:K.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,K.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(el),e.createVNode(nl,{"map-id":c.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),s.value?(e.openBlock(),e.createElementBlock("div",Oy,"Завантаження карти…")):f.value?(e.openBlock(),e.createElementBlock("div",Py,e.toDisplayString(f.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-73d647f9"]]),Ry={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Uy={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},qy=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",Ry,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Uy,[e.createVNode(Pt,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Hy={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},Wy={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Yy={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},Zy={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},Gy={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Ky=["disabled"],Xy=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(""),a=e.ref(null);e.watch(()=>o.modelValue,f=>{if(f){try{l.value=JSON.stringify(f,null,2)}catch{l.value="{}"}a.value=null}},{immediate:!0}),e.watch(l,f=>{if(!f.trim()){a.value=null;return}try{JSON.parse(f),a.value=null}catch(u){a.value=u.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:f}=window;if(f&&f.editor){const u=f.editor.getEditors();u.length>0&&u[u.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function i(){r("update:modelValue",null),l.value="",a.value=null}function s(){if(!a.value)try{const f=JSON.parse(l.value);r("save",f),i()}catch(f){console.error("Failed to parse JSON",f)}}return(f,u)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(i,["self"])},[e.createElementVNode("div",Hy,[e.createElementVNode("div",Wy,[u[1]||(u[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:i,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(yt),{size:20})])]),a.value?(e.openBlock(),e.createElementBlock("div",Yy," Помилка JSON: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Zy,[e.createVNode(Dt,{modelValue:l.value,"onUpdate:modelValue":u[0]||(u[0]=x=>l.value=x),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",Gy,[e.createElementVNode("button",{onClick:i,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:s,disabled:!!a.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,Ky)])])])):e.createCommentVNode("",!0)}}),Jy={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-gray-50"},Qy={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},eh={class:"w-full text-sm"},th={class:"divide-y divide-gray-200"},nh={class:"px-4 py-3"},oh=["onUpdate:modelValue","onChange"],lh=["value"],rh={class:"px-4 py-3"},ah=["onUpdate:modelValue","onChange"],ih=["value"],sh={class:"px-4 py-3 text-center"},ch=["checked","onChange"],dh={class:"px-4 py-3"},uh={key:0,class:"flex items-center gap-2"},ph=["onClick"],mh=["onClick"],fh={key:1},gh=["onClick"],yh={class:"px-4 py-3 text-right"},hh=["onClick"],xh=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=["catalog","legend","basemaps","info","layers","dataset","filters","search"],a=["top-left","top-right","bottom-left","bottom-right"],i=e.ref(null),s=e.ref(-1),f=e.computed(()=>o.modelValue||[]);function u(){const p=[...f.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",p)}function x(p){ce.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const _=f.value.filter((A,F)=>F!==p);r("update:modelValue",_)}})}function c(p,_,A){const F=[...f.value];F[p]={...F[p],[_]:A},r("update:modelValue",F)}function g(p){return!!p&&Object.keys(p).length>0}function d(p,_){s.value=p,i.value=_||{}}function y(p){d(p,{})}function m(p){ce.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{c(p,"config",void 0)}})}function h(p){s.value>-1&&c(s.value,"config",p),i.value=null,s.value=-1}return(p,_)=>{var A;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[_[1]||(_[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:u,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(A=f.value)!=null&&A.length?(e.openBlock(),e.createElementBlock("div",Qy,[e.createElementVNode("table",eh,[_[2]||(_[2]=e.createElementVNode("thead",{class:"bg-gray-50 border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",th,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(F,D)=>(e.openBlock(),e.createElementBlock("tr",{key:D,class:"hover:bg-gray-50"},[e.createElementVNode("td",nh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":$=>F.type=$,onChange:$=>c(D,"type",F.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,$=>e.createElementVNode("option",{key:$,value:$},e.toDisplayString($),9,lh)),64))],40,oh),[[e.vModelSelect,F.type]])]),e.createElementVNode("td",rh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":$=>F.position=$,onChange:$=>c(D,"position",F.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,$=>e.createElementVNode("option",{key:$,value:$},e.toDisplayString($),9,ih)),64))],40,ah),[[e.vModelSelect,F.position]])]),e.createElementVNode("td",sh,[e.createElementVNode("input",{type:"checkbox",checked:F.visible!==!1,onChange:$=>c(D,"visible",$.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,ch)]),e.createElementVNode("td",dh,[g(F.config)?(e.openBlock(),e.createElementBlock("div",uh,[e.createElementVNode("button",{onClick:$=>d(D,F.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(Ml),{size:16})],8,ph),e.createElementVNode("button",{onClick:$=>m(D),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(yt),{size:16})],8,mh)])):(e.openBlock(),e.createElementBlock("div",fh,[e.createElementVNode("button",{onClick:$=>y(D),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(qt),{size:16})],8,gh)]))]),e.createElementVNode("td",yh,[e.createElementVNode("button",{onClick:$=>x(D),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(Ln),{size:16})],8,hh)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Jy," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Xy,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":_[0]||(_[0]=F=>i.value=F),onSave:h},null,8,["modelValue"])])}}}),bh={class:"relative min-h-svh flex-1 flex-col flex gap-4 bg-white p-8 overflow-y-auto"},kh={class:"max-w-6xl mx-auto w-full"},wh={class:"flex items-center justify-between mb-6"},_h={class:"mb-2 text-2xl font-semibold text-gray-900"},Eh={class:"flex items-center gap-2"},Nh=["disabled"],Bh={key:0,class:"text-center py-12"},Vh={class:"space-y-6"},Ch={class:"space-y-6"},$h={class:"space-y-6"},vh=oe(e.defineComponent({__name:"MapSettings",setup(t){const n=he.useRouter(),o=he.useRoute(),r=e.ref(!0),l=e.ref(!1),a=e.ref([]),i=e.ref({}),s=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],f=s.map($=>$.id),u=$=>$?Array.isArray($)?$[0]:$:null,x=(()=>{const $=u(o.query.tab);return $&&f.includes($)?$:"general"})(),c=e.ref(x);e.watch(()=>o.query.tab,$=>{const w=u($);w&&f.includes(w)&&c.value!==w&&(c.value=w)}),e.watch(c,$=>{o.query.tab!==$&&n.replace({query:{...o.query,tab:$}})});const g=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),d=e.computed({get:()=>(g.value.layers||[]).map($=>$.id||$),set:$=>{g.value.layers=$}}),y=e.computed(()=>a.value.map($=>({id:$.id,text:$.name||$.id}))),m=e.computed({get:()=>d.value.map($=>{const w=y.value.find(C=>C.id===$);return w?w.text:$}),set:$=>{const w=$.map(C=>{const E=y.value.find(I=>I.text===C);return E?E.id:null}).filter(C=>C!==null);d.value=w}}),h=e.computed(()=>{const $=g.value.center;if(!Array.isArray($)||$.length<2)return"Не задано";const[w,C]=$;return w===void 0||C===void 0||w===null||C===null||Number.isNaN(Number(w))||Number.isNaN(Number(C))?"Не задано":`Lng ${Number(w).toFixed(6)}, Lat ${Number(C).toFixed(6)}`}),p=e.computed(()=>{const $=g.value.zoom;if($==null||$==="")return"Не задано";const w=Number($);return Number.isNaN(w)?"Не задано":w.toFixed(2)}),_=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function A(){try{const $=await fetch("/api/gis-layer-list");$.ok&&(a.value=await $.json())}catch($){console.error("Failed to load available layers:",$)}}async function F(){try{const w=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();g.value={...w,keywords:w.keywords||[],center:w.center??null,widgets:Array.isArray(w.widgets)?w.widgets:[],layers:(w.layers||[]).map(C=>C.id||C)}}catch($){console.error("Failed to load map:",$),ce.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{r.value=!1}}async function D(){var w,C;const $=(C=(w=i.value)==null?void 0:w.validate)==null?void 0:C.call(w);if($){ce.notify({type:"warning",title:"Валідація",message:Object.entries($).map(([E,I])=>`${E}: ${I}`).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/gis",
3
- "version": "0.2.75",
3
+ "version": "0.2.76",
4
4
  "type": "module",
5
5
  "author": "Softpro",
6
6
  "main": "./dist/index.js",