@ecosystem/ui-core (0.1.0)

Published 2026-07-12 12:01:13 +03:00 by qua8ion

Installation

@ecosystem:registry=
npm install @ecosystem/ui-core@0.1.0
"@ecosystem/ui-core": "0.1.0"

About this package

@ecosystem/ui-core

Общая Vue-библиотека generic entity-UI платформы Ecosystem: готовые страницы «список» и «карточка» поверх entity-API бэкенда (Ecosystem.Core.Web.Entities: /api/entities, /api/viewconfig/{entity}/*, /api/listview/{entity}, /api/crud/{entity}). Выросла из демо-SPA Resources/ (удалено, история — в git).

Форма поставки: пакет-источник

Пакет не собирается самexports указывает на src/index.ts, компиляцию .ts/.vue выполняет Vite-сборка приложения-потребителя (штатный подход для внутренних библиотек). Проверка типов пакета: npm run type-check (vue-tsc).

Подключение (из SPA в этом репозитории):

// package.json приложения
"dependencies": {
  "@ecosystem/ui-core": "file:../packages/ui-core"
}

Настройка HTTP (обязательно, один раз при старте приложения)

Библиотека не знает, как приложение аутентифицируется, — настройте клиент:

import { configureEntityHttp } from '@ecosystem/ui-core'

// Вариант А: bearer-хост (SPA с OIDC-токенами)
configureEntityHttp({
  baseUrl: config.apiBaseUrl,          // '' = same-origin
  getAccessToken: () => auth.getAccessToken(),
  onUnauthorized: () => auth.signIn(location.pathname + location.search)
})

// Вариант Б: куки-хост (SPA IdentityServer)
configureEntityHttp({
  credentials: 'include',              // кука сессии
  onUnauthorized: () => router.push({ name: 'login' })
  // xhrHeader включён по умолчанию: X-Requested-With на мутациях — анти-CSRF куки-хостов
})

Маршруты-контракт

ListViewPage/DetailViewPage навигируют по именам маршрутов listview и detailview — приложение обязано объявить их со следующими props:

import { ListViewPage, DetailViewPage } from '@ecosystem/ui-core'

const routes = [
  { path: '/listview/:entity', name: 'listview', component: ListViewPage, props: true },
  { path: '/detailview/:entity/:id', name: 'detailview', component: DetailViewPage, props: true }
]

Список доступных пользователю сущностей для навигации — entitiesApi.getEntities().

Tailwind

Разметка компонентов — на Tailwind 4. В приложении-потребителе:

  1. Добавьте исходники пакета в сканирование: @source "../node_modules/@ecosystem/ui-core/src"; (или путь до packages/ui-core/src при file:-установке).
  2. Определите брендовые токены темы, которые использует разметка: --color-brand-500, --color-brand-600, --color-brand-700 (см. @theme Tailwind 4).

Расширение

Серверный ViewComponent.Name резолвится через реестр; свои компоненты добавляются точечно:

import { registerCell, registerEditor } from '@ecosystem/ui-core'

registerCell('Image', MyImageCell)
registerEditor('CodeEditor', MyCodeEditor)

Компонент не зарегистрирован — поле не рендерится (deny by default, как на сервере).

Dependencies

Development dependencies

ID Version
@tanstack/vue-table ^8.20.5
@vue/tsconfig ^0.7.0
typescript ~5.8.3
vue ^3.5.13
vue-router ^4.5.0
vue-tsc ^2.1.10

Peer dependencies

ID Version
@tanstack/vue-table ^8.20.5
vue ^3.5.13
vue-router ^4.5.0
Details
npm
2026-07-12 12:01:13 +03:00
1
latest
12 KiB
Assets (1)
Versions (1) View all
0.1.0 2026-07-12