@smartsoft001-mobilems/claude-plugins 2.113.0 → 2.114.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 +1 -1
- package/plugins/mobilems/.claude-plugin/plugin.json +1 -1
- package/plugins/mobilems/skills/mobilems-objects/SKILL.md +1 -1
- package/plugins/mobilems/skills/mobilems-objects/references/lib-contents.md +2 -2
- package/plugins/mobilems/skills/mobilems-project-init/references/shared-lib.md +18 -14
- package/plugins/mobilems/skills/mobilems-search/SKILL.md +6 -6
package/package.json
CHANGED
|
@@ -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 subclass of `SearchbarBaseComponent` with the museum's own template) 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 (extends FilterInputBaseComponent), high-def-request-modal,
|
|
24
|
+
│ # menu, objects-searchbar (extends SearchbarBaseComponent), tabs/*
|
|
25
25
|
├── pages/ # list (ListComponent), item (ItemComponent) + index
|
|
26
26
|
└── services/ # objects.service.ts + index
|
|
27
27
|
```
|
|
@@ -56,9 +56,12 @@ 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`
|
|
60
|
-
|
|
61
|
-
|
|
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` and `select-checkbox` is a framework base now (see
|
|
62
|
+
"Framework now → bases"): generate each as `extends …BaseComponent` (`scroll-top` extends `ScrollTopComponent`,
|
|
63
|
+
which has no `Base` suffix) and write only the museum's own template and styles — the framework
|
|
64
|
+
ships no templates. The `app` shell and `skip-links` are
|
|
62
65
|
framework components (`smart-mobilems-app`, `smart-mobilems-skip-links`) — do not copy them.
|
|
63
66
|
|
|
64
67
|
> Trust the script over this table for the **leaf** components (the grid/list cards and the
|
|
@@ -109,19 +112,20 @@ files duplicate exports that now exist; copying those is the single most common
|
|
|
109
112
|
|
|
110
113
|
Framework now — do **not** generate (import from `@smartsoft001-mobilems/angular`):
|
|
111
114
|
|
|
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)
|
|
115
|
+
| Kind | Framework exports |
|
|
116
|
+
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
117
|
+
| environment | `createMobilemsEnvironment`, `MOBILEMS_ENVIRONMENT`, `EnvironmentService` |
|
|
118
|
+
| pipes | `altText`, `fileUrl`, `backgroundUrl`, `plainText`, `stripAnchors`, `capitalize` |
|
|
119
|
+
| tools | `classifyLink`, `isInternalLink`, `normalizeUrl`, `stripHtml`, `formatNamedEntries`, `normalizeSearchText`, `newTabText`, `pageToOffset`, `decodeHtmlEntities`, `ElementIdSequence`, `createSafeTimeouts`, `photoFileName`/`urlExtension`, `widgetImageUrl`, `overflowingTags`, `themeTagKey`, `themeTagsLayout`, `THEME_TAGS_VISIBLE_LIMIT` |
|
|
120
|
+
| directives | `a[smartExternalLink]`, `[smartExternalLinks]`, `[smartFocusTrap]`, `[smartTruncatedTitle]` (references use `app…` — rename the attributes) |
|
|
121
|
+
| services | `ConfirmationModalService`, `ExternalLinkConfirmationService`, `FilterPersistenceService`, `OrientationService`, `WcagChangesService`, `LineHeightService`, `BreadcrumbsService`, `ContactService`, `DataService`, `MuseumSeoService` |
|
|
122
|
+
| interceptors | `LanguageInterceptor`, `PreviewAuthInterceptor`, `SsrTimeoutInterceptor`, `DedupeRequestInterceptor` |
|
|
123
|
+
| 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`) |
|
|
124
|
+
| SSR tools | `injectServerResponseInit`, `appendPreloadLinks` (image preload `Link` headers) |
|
|
122
125
|
|
|
123
126
|
What stays in the app lib: the **template and styles** of every base above — the museum keeps its
|
|
124
|
-
own HTML (
|
|
127
|
+
own HTML and Tailwind classes (the filter inputs, searchbar, catalog toolbar and filter bar, theme tags and select
|
|
128
|
+
checkbox are logic only — extend the base, write the markup yourself; e.g. the confirmation-modal component is markup over `ConfirmationModalBaseComponent` /
|
|
125
129
|
`ConfirmationModalService`), the `leaflet` dependency (`MapBaseComponent` asks the subclass for
|
|
126
130
|
`loadLeaflet()`), `truncateHtml` and any museum-only tools. `local-storage`, `configs-cache`, `not-found-content` are gone: language lives in
|
|
127
131
|
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
|
|
32
|
-
|
|
|
33
|
-
| a tab strip
|
|
34
|
-
| result cards
|
|
35
|
-
| "next page" behaviour | the shared `NextPageComponent`, same pattern as the module lists
|
|
36
|
-
| a search input
|
|
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 — the logic is `SearchbarBaseComponent`; the museum keeps its own template |
|
|
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
|