maksit-webui/CHANGELOG.md
Maksym Sadovnychyy ecce33e42f
Some checks failed
Storybook tests / storybook-tests (push) Has been cancelled
(feature): Breadcrumb and RepoUtils update
2026-08-06 04:50:32 +02:00

12 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.4.3] - 2026-08-06

Added

  • Breadcrumb — presentational page trail (nav + ol); injectable linkComponent (e.g. react-router Link); last item is current page (aria-current). Export: Breadcrumb, BreadcrumbProps, BreadcrumbItem. Storybook coverage included.

Changed

  • RepoUtils: removed Update-RepoUtils tool (local-copy sync only); engine/plugin/module refinements; added utils/templates/ CI Docker/build helpers.

[0.4.2] - 2026-07-28

Added

  • clearToasts — dismisses all active toasts (exported from @maks-it.com/webui; useful after recovery from transient auth/network errors).

Changed

  • Toast auto-dismiss: when duration is omitted, toasts now dismiss after 8s by default (duration > 0 still required to auto-dismiss; pass 0 to keep sticky).
  • RepoUtils refreshed to the Community-only layout: single utils\Invoke-ReleasePackage.bat entry point; removed HA/Single release wrappers, Helm uninstall engine, and Docker/Podman/Helm deploy plugins not used by this library repo.
  • .gitignore: ignore generated test-results/ and utils/tests/results/.

[0.4.1] - 2026-07-24

Added

  • FileBrowser — full-featured generic storage browser (roots sidebar, breadcrumbs, sort/filter, multi-select delete, optional create folder / upload / download hooks, text/JSON preview). No product-specific OCI/catalog logic. Export: FileBrowser, FileBrowserItem, FileBrowserProps, FileBrowserRoot.
  • Modal / ConfirmDialog — centered dialog shell (Escape + backdrop close, title/body/footer) and confirm variant with primary/cancel actions.
  • Loader / Spinner — full-screen overlay loader with optional controlled visible, plus event helpers showLoader / hideLoader / enableLoader / disableLoader (ref-counted, matching host HTTP auth wiring). Inline Spinner for local loading UI.
  • Masonry — responsive column masonry layout (breakpoints).
  • LightBox — masonry gallery + fullscreen viewer (Escape / arrow keys, captions, thumbnails).
  • CookieConsent — consent bar with injectable linkComponent (no hard-coded react-router), plus getCookie / setCookie helpers.
  • WhatsAppButton / FacebookMessengerButton — click-to-chat links (wa.me / m.me); optional floating corner placement. Intentionally not the deprecated Facebook Customer Chat SDK.
  • Ratings — star rating widget (fractional fill, optional interactive onChange, sizes).
  • Core hooks: usePrevious, useInterval, useOnScreen, useLocalStorage, useSessionStorage, useLongPress, useDebounce, useOnClickOutside, useMedia, useHover (typed, SSR-safe where relevant; storage hooks sync via storage events).
  • Jest coverage for new hooks and component helpers (FileBrowser format/prefs, cookie helpers, loader events, social href builders); Storybook interaction plays for new components and a core/hooks demo.

Changed

  • FileUploadComponent — drag-and-drop (droppable, default true), accept filter, drop-active highlight; drop replaces the current selection.
  • Dev dependencies refreshed within current majors (Storybook 10.5, React 19.2.8, Vitest 4.1.10, axios 1.18, lucide-react 1.26, etc.). Held majors: SignalR 8, TypeScript 6, Vite 6.
  • Coverage badges: CoverageBadges uses badgeFormat: shields (updates README.md img.shields.io URLs) instead of writing SVG files under assets/badges/.

Removed

  • ResponseModelBaseSchema — empty Zod marker; keep the ResponseModelBase TypeScript type only (matches Core).
  • assets/badges/ — local SVG coverage badges (replaced by shields.io).

Fixed

  • LightBox: fullscreen viewer footer uses a fixed-height horizontal filmstrip instead of a second Masonry grid (which crushed the main image).
  • DataTable: resync column widths when columns.length changes; columnWidth falls back to default so react-virtualized never receives undefined.

[0.4.0] - 2026-07-07

Changed

  • Breaking: merged @maks-it.com/webui-contracts, @maks-it.com/webui-core, and @maks-it.com/webui-components into a single published package @maks-it.com/webui. Host apps install one package and import everything from @maks-it.com/webui (see assets/docs/NPM_CONSUMPTION.md migration notes).
  • Breaking: src/ is now the npm package root — src/package.json publishes as @maks-it.com/webui; npm workspaces and src/packages/* nesting removed.
  • Source layout: contracts/, core/, and components/ live directly under src/ (internal organization only; no subpath exports).
  • Release pipeline (utils/engines/release/scriptSettings.json) publishes one package; NpmReleaseVersion.syncWorkspaceVersions disabled.
  • Jest, Vitest, and Storybook configs updated for the flat src/ layout (@webui/* aliases point at src/{contracts,core,components}).
  • VS Code/Cursor: TypeScript SDK and integrated terminal default to src/.
  • src/coverage/ explicitly gitignored; generated coverage is no longer tracked.

Removed

  • @maks-it.com/webui-contracts, @maks-it.com/webui-core, and @maks-it.com/webui-components as separate npm packages (superseded by @maks-it.com/webui).
  • src/packages/ workspace layout and per-package package.json files.
  • Repo-root tsconfig.json and stray node_modules/ (tooling and dependencies live under src/ only).

[0.3.5] - 2026-07-06

Fixed

  • ENTITY_SCOPES_ARRAY_POLICY: synthetic identity is now {entityId}-{entityType} (not including scope), so adding an application scope alongside an existing organization scope produces a correct AddToCollection delta, and permission changes on id-less rows update in place via _deltaId.

[0.3.4] - 2026-07-06

Added

  • OAuth / external identity providers (extracted from FiPlan.Anywhere):
    • @maks-it.com/webui-contracts: LoginProviderExternal, EmailProtocol, ServerAuthenticationMethod, MsalViewModel, IdpRedeemLoginResponse, MailboxOAuthPending, and mailbox OAuth session/query constants.
    • @maks-it.com/webui-core: startIdpRedirect, shouldSkipIdpLoginCallback, useIdpLoginCallback, mailbox OAuth redirect helpers (collectMailboxOAuthProtocols, startMailboxOAuthRedirect, useMailboxOAuthReturn), and removeParamFromUrl / removeParamsFromUrl.
    • @maks-it.com/webui-components: ExternalLoginButtons, IdpLoginCallbackHandler, MailboxOAuthReturnHandler.
  • @maks-it.com/webui-core: HOSTNAMES_ARRAY_POLICY for Certs UI account hostname PATCH collections (identityKey / idFieldKey: hostname).
  • deepDelta regression tests for Certs/Vault consumer forms — HOSTNAMES_ARRAY_POLICY, ENTITY_SCOPES_ARRAY_POLICY, VERSIONS_ARRAY_POLICY, advanced ArrayPolicy options (rootKey, childArrayKeys, deleteItemWhenRoleRemoved).

Changed

  • All @maks-it.com/webui-* packages versioned at 0.3.4 with aligned workspace dependency ranges.
  • RepoUtils entry points and docs: utils/src/utils/ (Invoke-TestEngine.bat, Invoke-ReleasePackage-Single.bat, Update-RepoUtils.bat; README and assets/docs/NPM_PUBLISH.md updated).
  • Release secret env vars documented as logical names Npm and GitHub (see utils/engines/release/scriptSettings.json).
  • Package READMEs document OAuth exports and PATCH collection policies.

Fixed

  • deepDelta identifiable-array diff: role-null removals emit the correct identity field (id vs _deltaId); item deltas are omitted when only operations changed (no spurious id-only placeholders).

[0.3.3] - 2026-05-31

Changed

  • Migrated utils/ to maksit-repoutils 1.0.14 layout under utils/src/ (Invoke-ReleasePackage, Invoke-TestEngine, Update-RepoUtils). Product scriptSettings.json paths updated for the deeper engine folders.

Added

  • @maks-it.com/webui-core: useWebUiHub React hook for JWT-authenticated SignalR hubs — connection state (idle / connecting / connected / reconnecting / disconnected), optional automatic reconnect, and typed hub event handlers.
  • resolveHubUrl helper (absolute URLs unchanged; relative paths resolve against window.location.origin).
  • @microsoft/signalr peer dependency on @maks-it.com/webui-core.

Changed

  • All @maks-it.com/webui-* packages published at 0.3.3 with aligned workspace dependency ranges.
  • Jest tests for core and contracts moved from co-located src/**/*.test.ts to packages/*/test/; root jest.config.cjs roots updated accordingly.
  • @maks-it.com/webui-core README documents SignalR install and useWebUiHub usage.

[0.3.2] - 2026-05-30

Fixed

  • Disabled and read-only editors now show consistent muted styling: CheckBoxComponent uses opacity-50 when disabled; FieldContainer grays field labels when inactive; checkbox, radio, text, select, date, and secret fields share getInactiveControlClasses().
  • Added tsup to workspace root devDependencies so npm ci + npm run build resolve the CLI on Windows (subpackage-only hoisting was not always on PATH for nested workspace scripts).

Added

  • Storybook Disabled story for CheckBoxComponent.

[0.3.1] - 2026-05-30

Fixed

  • Toast IDs no longer use crypto.randomUUID() (requires HTTPS/localhost). IDs are generated with a counter + timestamp via createToastId() so toasts work over HTTP in Docker and other non-secure contexts.

Changed

  • @maks-it.com/webui-components: shared helpers (debounce, colSpanClass, GridColSpan) are imported from the functions barrel instead of subpaths.
  • @maks-it.com/webui-core: re-exports date-fns primitives (parseISO, formatISO, format, getDaysInMonth, addMonths, subMonths) for consumers.
  • @maks-it.com/webui-components DateTimePickerComponent imports date helpers from @maks-it.com/webui-core instead of date-fns directly.

Removed

  • lodash and @types/lodash from @maks-it.com/webui-components; filter debouncing uses a local debounce() helper.
  • Duplicate date-fns dependency from @maks-it.com/webui-components (date-fns remains on @maks-it.com/webui-core only).

[0.3.0] - 2026-05-25

Added

  • Storybook 10 catalog for @maks-it.com/webui-components: Tailwind v4, React Router decorator, autodocs, a11y addon, stories for all editors, DataTable (with ClientSideInteractive filters/pagination demo), Layout, and FormLayout (FormContainer, FormHeader, FormContent, FormFooter).
  • npm run storybook and npm run build-storybook from src/.

Changed

  • Storybook stories under src/stories/components/ mirror packages/components/src/components/ folder names (editors, Toast, …); sidebar titles use components/<folder>/…; @webui/* Vite aliases import package source without a build.

Removed

  • Unused VaultStyleListSection, VaultStyleDataTable, and VaultStyleListFooter (components/list/) — not consumed by vault or certs-ui; list screens use DataTable instead.

Fixed

  • Editor colspan uses static Tailwind col-span-* classes via functions/tailwind/gridColSpan.ts so Storybook and Vite builds apply the 12-column grid correctly.
  • Storybook 10 preview: Vite esbuild JSX set to automatic so decorators and stories no longer throw React is not defined.

[0.2.0] - 2026-05-24

Added

  • Jest test suite (50 tests) covering @maks-it.com/webui-core utilities and @maks-it.com/webui-contracts schemas.
  • Root npm test script and per-package build tsconfigs (tsconfig.build.json) for TypeScript 6 declaration emit.

Changed

  • Updated dependencies to current majors: TypeScript 6, Jest 30, Zod 4.4, lucide-react 1.x, axios 1.16, and React 19.2.
  • Migrated Zod schemas to v4 APIs: intersection() replaces .and(), custom refinements use 'custom' issue codes.
  • @maks-it.com/webui-components Toast IDs now use crypto.randomUUID(); lodash imports use lodash/debounce subpaths.
  • Peer dependency ranges: zod ^4.4, axios ^1.16, lucide-react ^1.0.

Removed

  • uuid runtime dependency from @maks-it.com/webui-components.

[0.1.0] - 2026-05-24

Added

  • Initial @maks-it.com/webui-contracts, @maks-it.com/webui-core, and @maks-it.com/webui-components packages extracted from Certs UI and Vault WebUI.
  • npm publish under the @maks-it.com org scope on registry.npmjs.org.