@smartsoft001-mobilems/claude-plugins 2.113.0 → 2.115.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartsoft001-mobilems/claude-plugins",
3
- "version": "2.113.0",
3
+ "version": "2.115.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "mobilems",
3
3
  "description": "MobilEMS-specific Claude Code skills (MuzaCMS / MobileMS indexer API)",
4
- "version": "2.113.0"
4
+ "version": "2.115.0"
5
5
  }
@@ -83,7 +83,7 @@ README) — never a per-module copy. `scripts/verify-module.sh` fails the run on
83
83
  The cross-cutting rules live in `mobilems-project-init`
84
84
  `references/qa-hardening.md`; these are the objects-specific ones:
85
85
 
86
- - **Search debounce.** The panel full-text search (`app-objects-searchbar variant="panel"`) must
86
+ - **Search debounce.** The panel full-text search (`app-objects-searchbar variant="panel"`, a standalone component: a live debounced search through `searchEvent` / `closeEvent`, an `autofocus` input, never navigates - it does not extend `SearchbarBaseComponent`, which navigates to the search route) must
87
87
  re-emit through a handler with `@debounce(250)` (`lodash-decorators`) — without it every keystroke
88
88
  hits the API. Collections and news filters already do this; keep the modules consistent.
89
89
  - **List page:** show the total result count (`facade.totalCount()`) and add the shared
@@ -20,8 +20,8 @@ libs/museum-objects/
20
20
  └── lib/
21
21
  ├── objects.module.ts # MuseumObjectsModule (references/module-and-routes.md)
22
22
  ├── objects.routes.ts
23
- ├── components/ # description, filter-input, high-def-request-modal,
24
- │ # menu, objects-searchbar, tabs/*
23
+ ├── components/ # description, filter-input (may extend FilterInputBaseComponent - its API is a subset), high-def-request-modal,
24
+ │ # menu, objects-searchbar (standalone, live search), tabs/*
25
25
  ├── pages/ # list (ListComponent), item (ItemComponent) + index
26
26
  └── services/ # objects.service.ts + index
27
27
  ```
@@ -56,9 +56,17 @@ Build everything else — `header`, `footer`, `page`, the `filter*` family, `bre
56
56
  `next-page`, `calendar`, `confirmation-modal`, `newsletter-*`, `image-info-panel`, `icons`, `tabs`,
57
57
  and the `widget` container with its foundation widgets. The logic of `calendar`, `pagination`,
58
58
  `carousel`, the three home carousels, `slider`, `scroll-top`, `gallery` (+ fullscreen dialog),
59
- `confirmation-modal`, `newsletter-modal` and `map` is a framework base now (see "Framework now →
60
- bases"): generate each as `extends …BaseComponent` and write only the museum's own template and
61
- styles — the framework ships no templates. The `app` shell and `skip-links` are
59
+ `confirmation-modal`, `newsletter-modal`, `map`, the `filter-input` / `filter-date-input` /
60
+ `filter-custom-dictionary-input` / `filter-dictionary-input` family, `searchbar`, `catalog-toolbar`,
61
+ `catalog-filter-bar`, `theme-tags-filter`, `select-checkbox`, `dropdown`, `tabs`, `wcag`, `breadcrumbs`,
62
+ `breadcrumbs-bar` and `menu-item` is a framework base now (see
63
+ "Framework now → bases"): generate each as `extends …BaseComponent` (`scroll-top` extends `ScrollTopComponent`,
64
+ which has no `Base` suffix) and write only the museum's own template and styles — the framework
65
+ ships no templates. `dropdown`, `tabs`, `wcag`, `breadcrumbs`, `breadcrumbs-bar` and `menu-item` are
66
+ the shared-lib components that extend `DropdownBaseComponent`, `TabsBaseComponent`, `WcagBaseComponent`,
67
+ `BreadcrumbsBaseComponent`, `BreadcrumbsBarBaseComponent` and `MenuItemBaseComponent`; `category-dropdown`
68
+ and other feature-lib look-alikes are not bases. `in-page-anchors` is not generated: use the framework
69
+ `InPageAnchorsDirective` (`[smartInPageAnchors]`). The `app` shell and `skip-links` are
62
70
  framework components (`smart-mobilems-app`, `smart-mobilems-skip-links`) — do not copy them.
63
71
 
64
72
  > Trust the script over this table for the **leaf** components (the grid/list cards and the
@@ -109,19 +117,20 @@ files duplicate exports that now exist; copying those is the single most common
109
117
 
110
118
  Framework now — do **not** generate (import from `@smartsoft001-mobilems/angular`):
111
119
 
112
- | Kind | Framework exports |
113
- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
114
- | environment | `createMobilemsEnvironment`, `MOBILEMS_ENVIRONMENT`, `EnvironmentService` |
115
- | pipes | `altText`, `fileUrl`, `backgroundUrl`, `plainText`, `stripAnchors`, `capitalize` |
116
- | tools | `classifyLink`, `isInternalLink`, `normalizeUrl`, `stripHtml`, `formatNamedEntries`, `normalizeSearchText`, `newTabText`, `pageToOffset`, `decodeHtmlEntities`, `ElementIdSequence`, `createSafeTimeouts`, `photoFileName`/`urlExtension`, `widgetImageUrl`, `overflowingTags` |
117
- | directives | `a[smartExternalLink]`, `[smartExternalLinks]`, `[smartFocusTrap]`, `[smartTruncatedTitle]` (references use `app…` — rename the attributes) |
118
- | services | `ConfirmationModalService`, `ExternalLinkConfirmationService`, `FilterPersistenceService`, `OrientationService`, `WcagChangesService`, `LineHeightService`, `BreadcrumbsService`, `ContactService`, `DataService`, `MuseumSeoService` |
119
- | interceptors | `LanguageInterceptor`, `PreviewAuthInterceptor`, `SsrTimeoutInterceptor`, `DedupeRequestInterceptor` |
120
- | bases | `CalendarBaseComponent`, `PaginationDotsBaseComponent`, `PaginationBaseComponent`, `CarouselBaseComponent`, `PartnersCarouselBaseComponent`, `NewObjectsCarouselBaseComponent`, `ArticlesCarouselBaseComponent`, `SliderBaseComponent` (+ `ISliderOptions`; `ScrollTopComponent` is server-guarded), `GalleryBaseComponent`, `GalleryFullscreenDialogBaseComponent` (`GalleryFullscreenBaseComponent` is `@deprecated`), `ConfirmationModalBaseComponent`, `NewsletterModalBaseComponent`, `MapBaseComponent` |
121
- | SSR tools | `injectServerResponseInit`, `appendPreloadLinks` (image preload `Link` headers) |
120
+ | Kind | Framework exports |
121
+ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
122
+ | environment | `createMobilemsEnvironment`, `MOBILEMS_ENVIRONMENT`, `EnvironmentService` |
123
+ | pipes | `altText`, `fileUrl`, `backgroundUrl`, `plainText`, `stripAnchors`, `capitalize` |
124
+ | tools | `classifyLink`, `isInternalLink`, `normalizeUrl`, `stripHtml`, `formatNamedEntries`, `normalizeSearchText`, `newTabText`, `pageToOffset`, `decodeHtmlEntities`, `ElementIdSequence`, `createSafeTimeouts`, `photoFileName`/`urlExtension`, `widgetImageUrl`, `overflowingTags`, `themeTagKey`, `themeTagsLayout`, `THEME_TAGS_VISIBLE_LIMIT`, `resolveMenuItemTarget`, `isNavigableMenuItem` (+ `MenuItemTarget`) |
125
+ | directives | `a[smartExternalLink]`, `[smartExternalLinks]`, `[smartFocusTrap]`, `[smartTruncatedTitle]`, `[smartInPageAnchors]` (`InPageAnchorsDirective`; references use `app…` — rename the attributes) |
126
+ | services | `ConfirmationModalService`, `ExternalLinkConfirmationService`, `FilterPersistenceService`, `OrientationService`, `WcagChangesService`, `LineHeightService`, `BreadcrumbsService`, `ContactService`, `DataService`, `MuseumSeoService` |
127
+ | interceptors | `LanguageInterceptor`, `PreviewAuthInterceptor`, `SsrTimeoutInterceptor`, `DedupeRequestInterceptor` |
128
+ | bases | `CalendarBaseComponent`, `PaginationDotsBaseComponent`, `PaginationBaseComponent`, `CarouselBaseComponent`, `PartnersCarouselBaseComponent`, `NewObjectsCarouselBaseComponent`, `ArticlesCarouselBaseComponent`, `SliderBaseComponent` (+ `ISliderOptions`; `ScrollTopComponent` is server-guarded), `GalleryBaseComponent`, `GalleryFullscreenDialogBaseComponent` (`GalleryFullscreenBaseComponent` is `@deprecated`), `ConfirmationModalBaseComponent`, `NewsletterModalBaseComponent`, `MapBaseComponent`, `FilterInputBaseComponent`, `FilterDateInputBaseComponent`, `FilterCustomDictionaryInputBaseComponent`, `FilterDictionaryInputBaseComponent` (inline tree, `source`, paging), `ThemeTagsFilterBaseComponent`, `CatalogFilterBarBaseComponent`, `CatalogToolbarBaseComponent`, `SearchbarBaseComponent`, `SelectCheckboxBaseComponent` (+ `ISelectionHooks`), `DropdownBaseComponent`, `TabsBaseComponent`, `WcagBaseComponent` (+ `WCAG_OPTION_GROUPS`), `BreadcrumbsBaseComponent`, `BreadcrumbsBarBaseComponent`, `MenuItemBaseComponent` |
129
+ | SSR tools | `injectServerResponseInit`, `appendPreloadLinks` (image preload `Link` headers) |
122
130
 
123
131
  What stays in the app lib: the **template and styles** of every base above — the museum keeps its
124
- own HTML (e.g. the confirmation-modal component is markup over `ConfirmationModalBaseComponent` /
132
+ own HTML and Tailwind classes (the filter inputs, searchbar, catalog toolbar and filter bar, theme tags and select
133
+ checkbox, dropdown, tabs, wcag panel, breadcrumbs and menu item are logic only — extend the base, write the markup yourself; e.g. the confirmation-modal component is markup over `ConfirmationModalBaseComponent` /
125
134
  `ConfirmationModalService`), the `leaflet` dependency (`MapBaseComponent` asks the subclass for
126
135
  `loadLeaflet()`), `truncateHtml` and any museum-only tools. `local-storage`, `configs-cache`, `not-found-content` are gone: language lives in
127
136
  the framework `TranslationService`, the config cache in `ConfigsFacade.init()`.
@@ -28,12 +28,12 @@ skeleton; build the foundation with `mobilems-project-init` first.
28
28
  `node_modules/@smartsoft001-mobilems/angular/README.md`)
29
29
  2. `libs/shared/angular/README.md` — the app's own shared lib
30
30
 
31
- | Do not hand-roll | Use |
32
- | --- | --- |
33
- | a tab strip | `TabsComponent` / `Tab` from the shared lib (the page already imports it) |
34
- | result cards | the module's own list-item components (`objects-list-item`, news/collection cards) |
35
- | "next page" behaviour | the shared `NextPageComponent`, same pattern as the module lists |
36
- | a search input | `app-objects-searchbar` / the shared searchbar variants |
31
+ | Do not hand-roll | Use |
32
+ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
33
+ | a tab strip | `TabsComponent` / `Tab` from the shared lib (the page already imports it; logic: `TabsBaseComponent`, the museum keeps its own template) |
34
+ | result cards | the module's own list-item components (`objects-list-item`, news/collection cards) |
35
+ | "next page" behaviour | the shared `NextPageComponent`, same pattern as the module lists |
36
+ | a search input | the shared `searchbar` (logic: `SearchbarBaseComponent`, navigates to the search route; the museum keeps its own template); `app-objects-searchbar` is standalone and emits a live search instead |
37
37
 
38
38
  Forking a result card for search is the classic mistake: the card then drifts
39
39
  from the module's list and the museum ends up with two visually different