@rulecms/source-components-angular 0.1.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/LICENSE +9 -0
- package/README.md +117 -0
- package/THIRD_PARTY_NOTICES +50 -0
- package/fesm2022/rulecms-source-components-angular-icon-registry.mjs +144 -0
- package/fesm2022/rulecms-source-components-angular-icon-registry.mjs.map +1 -0
- package/fesm2022/rulecms-source-components-angular.mjs +3979 -0
- package/fesm2022/rulecms-source-components-angular.mjs.map +1 -0
- package/icon-registry/icon-aliases.d.ts +10 -0
- package/icon-registry/icon-aliases.d.ts.map +1 -0
- package/icon-registry/index.d.ts +6 -0
- package/icon-registry/index.d.ts.map +1 -0
- package/icon-registry/resolve-icon-name.d.ts +6 -0
- package/icon-registry/resolve-icon-name.d.ts.map +1 -0
- package/icon-registry/resolve-icon-node.d.ts +25 -0
- package/icon-registry/resolve-icon-node.d.ts.map +1 -0
- package/icon-registry/rulecms-source-components-angular-icon-registry.d.ts.map +1 -0
- package/icon-registry/search-icon-names.d.ts +11 -0
- package/icon-registry/search-icon-names.d.ts.map +1 -0
- package/index.d.ts +6 -0
- package/lib/base-components/display/card-entries/card-entries.d.ts +3 -0
- package/lib/base-components/display/card-entries/card-entries.d.ts.map +1 -0
- package/lib/base-components/display/card-groups.d.ts +3 -0
- package/lib/base-components/display/card-groups.d.ts.map +1 -0
- package/lib/base-components/display/component-attributes/attribute-list-for-component-types.d.ts +20 -0
- package/lib/base-components/display/component-attributes/attribute-list-for-component-types.d.ts.map +1 -0
- package/lib/base-components/display/component-attributes/component-name-to-modify-attribute.d.ts +12 -0
- package/lib/base-components/display/component-attributes/component-name-to-modify-attribute.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/attribute-edit-mode-configs.d.ts +3 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/build-cloudinary-image-urls.d.ts +7 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/build-cloudinary-image-urls.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/cloudinary-advanced-image.component.d.ts +28 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/cloudinary-advanced-image.component.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/default-attribute-values.d.ts +3 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/resolve-no-container.d.ts +8 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/resolve-renders-own-element.d.ts +6 -0
- package/lib/base-components/display/components/cloudinary-advanced-image/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/accordion-attributes.d.ts +109 -0
- package/lib/base-components/display/components/r-accordion/accordion-attributes.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/attribute-edit-mode-configs.d.ts +16 -0
- package/lib/base-components/display/components/r-accordion/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/default-attribute-values.d.ts +3 -0
- package/lib/base-components/display/components/r-accordion/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-accordion/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/r-accordion.component.d.ts +27 -0
- package/lib/base-components/display/components/r-accordion/r-accordion.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/resolve-no-container.d.ts +8 -0
- package/lib/base-components/display/components/r-accordion/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-accordion/resolve-renders-own-element.d.ts +6 -0
- package/lib/base-components/display/components/r-accordion/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/attribute-edit-mode-configs.d.ts +12 -0
- package/lib/base-components/display/components/r-button/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/button-attributes.d.ts +51 -0
- package/lib/base-components/display/components/r-button/button-attributes.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/button-css-variables.d.ts +28 -0
- package/lib/base-components/display/components/r-button/button-css-variables.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/button-instance-props.d.ts +23 -0
- package/lib/base-components/display/components/r-button/button-instance-props.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/button-preset-styles.d.ts +13 -0
- package/lib/base-components/display/components/r-button/button-preset-styles.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/button-presets.d.ts +76 -0
- package/lib/base-components/display/components/r-button/button-presets.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/default-attribute-values.d.ts +14 -0
- package/lib/base-components/display/components/r-button/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-button/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/r-button.component.d.ts +26 -0
- package/lib/base-components/display/components/r-button/r-button.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/resolve-button-preset.d.ts +11 -0
- package/lib/base-components/display/components/r-button/resolve-button-preset.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/resolve-no-container.d.ts +8 -0
- package/lib/base-components/display/components/r-button/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-button/resolve-renders-own-element.d.ts +6 -0
- package/lib/base-components/display/components/r-button/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/attribute-edit-mode-configs.d.ts +10 -0
- package/lib/base-components/display/components/r-divider/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/default-attribute-values.d.ts +11 -0
- package/lib/base-components/display/components/r-divider/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-divider/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/divider-attributes.d.ts +41 -0
- package/lib/base-components/display/components/r-divider/divider-attributes.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/divider-styles.d.ts +14 -0
- package/lib/base-components/display/components/r-divider/divider-styles.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/r-divider.component.d.ts +16 -0
- package/lib/base-components/display/components/r-divider/r-divider.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/resolve-no-container.d.ts +7 -0
- package/lib/base-components/display/components/r-divider/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-divider/resolve-renders-own-element.d.ts +6 -0
- package/lib/base-components/display/components/r-divider/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/attribute-edit-mode-configs.d.ts +8 -0
- package/lib/base-components/display/components/r-embed/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/default-attribute-values.d.ts +14 -0
- package/lib/base-components/display/components/r-embed/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-embed/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/embed-attributes.d.ts +71 -0
- package/lib/base-components/display/components/r-embed/embed-attributes.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/embed-providers.d.ts +78 -0
- package/lib/base-components/display/components/r-embed/embed-providers.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/r-embed.component.d.ts +21 -0
- package/lib/base-components/display/components/r-embed/r-embed.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/resolve-embed.d.ts +41 -0
- package/lib/base-components/display/components/r-embed/resolve-embed.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/resolve-no-container.d.ts +13 -0
- package/lib/base-components/display/components/r-embed/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-embed/resolve-renders-own-element.d.ts +9 -0
- package/lib/base-components/display/components/r-embed/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/attribute-edit-mode-configs.d.ts +3 -0
- package/lib/base-components/display/components/r-icon/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/default-attribute-values.d.ts +3 -0
- package/lib/base-components/display/components/r-icon/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-icon/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/icon-attribute-value.d.ts +26 -0
- package/lib/base-components/display/components/r-icon/icon-attribute-value.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/r-icon.component.d.ts +16 -0
- package/lib/base-components/display/components/r-icon/r-icon.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/resolve-no-container.d.ts +7 -0
- package/lib/base-components/display/components/r-icon/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-icon/resolve-renders-own-element.d.ts +7 -0
- package/lib/base-components/display/components/r-icon/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/attribute-edit-mode-configs.d.ts +10 -0
- package/lib/base-components/display/components/r-list/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/default-attribute-values.d.ts +3 -0
- package/lib/base-components/display/components/r-list/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-list/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/list-attributes.d.ts +72 -0
- package/lib/base-components/display/components/r-list/list-attributes.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/r-list.component.d.ts +22 -0
- package/lib/base-components/display/components/r-list/r-list.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/resolve-no-container.d.ts +8 -0
- package/lib/base-components/display/components/r-list/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-list/resolve-renders-own-element.d.ts +7 -0
- package/lib/base-components/display/components/r-list/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/attribute-edit-mode-configs.d.ts +3 -0
- package/lib/base-components/display/components/r-text/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/default-attribute-values.d.ts +4 -0
- package/lib/base-components/display/components/r-text/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-text/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/enclosing-tags.d.ts +48 -0
- package/lib/base-components/display/components/r-text/enclosing-tags.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/r-text.component.d.ts +16 -0
- package/lib/base-components/display/components/r-text/r-text.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/resolve-enclosing-tag.d.ts +18 -0
- package/lib/base-components/display/components/r-text/resolve-enclosing-tag.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/resolve-no-container.d.ts +13 -0
- package/lib/base-components/display/components/r-text/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-text/resolve-renders-own-element.d.ts +11 -0
- package/lib/base-components/display/components/r-text/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/attribute-edit-mode-configs.d.ts +3 -0
- package/lib/base-components/display/components/r-video/attribute-edit-mode-configs.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/build-video-delivery-urls.d.ts +7 -0
- package/lib/base-components/display/components/r-video/build-video-delivery-urls.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/default-attribute-values.d.ts +3 -0
- package/lib/base-components/display/components/r-video/default-attribute-values.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/display-card-entry.d.ts +3 -0
- package/lib/base-components/display/components/r-video/display-card-entry.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/r-video.component.d.ts +26 -0
- package/lib/base-components/display/components/r-video/r-video.component.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/resolve-no-container.d.ts +8 -0
- package/lib/base-components/display/components/r-video/resolve-no-container.d.ts.map +1 -0
- package/lib/base-components/display/components/r-video/resolve-renders-own-element.d.ts +6 -0
- package/lib/base-components/display/components/r-video/resolve-renders-own-element.d.ts.map +1 -0
- package/lib/base-components/editor-preview/card-entries/card-entries.d.ts +3 -0
- package/lib/base-components/editor-preview/card-entries/card-entries.d.ts.map +1 -0
- package/lib/base-components/editor-preview/card-groups.d.ts +3 -0
- package/lib/base-components/editor-preview/card-groups.d.ts.map +1 -0
- package/lib/component-identifiers.d.ts +4 -0
- package/lib/component-identifiers.d.ts.map +1 -0
- package/lib/component-library-module.d.ts +25 -0
- package/lib/component-library-module.d.ts.map +1 -0
- package/lib/get-component-metadata-for-editing.d.ts +3 -0
- package/lib/get-component-metadata-for-editing.d.ts.map +1 -0
- package/lib/get-preview-components.d.ts +12 -0
- package/lib/get-preview-components.d.ts.map +1 -0
- package/lib/get-source-components-plugin.d.ts +9 -0
- package/lib/get-source-components-plugin.d.ts.map +1 -0
- package/lib/shared/html-tag.component.d.ts +22 -0
- package/lib/shared/html-tag.component.d.ts.map +1 -0
- package/lib/shared/icons/append-icon-children.d.ts +5 -0
- package/lib/shared/icons/append-icon-children.d.ts.map +1 -0
- package/lib/shared/icons/svg-icon.component.d.ts +21 -0
- package/lib/shared/icons/svg-icon.component.d.ts.map +1 -0
- package/lib/shared/inline-markup/index.d.ts +5 -0
- package/lib/shared/inline-markup/index.d.ts.map +1 -0
- package/lib/shared/inline-markup/inline-markup.component.d.ts +16 -0
- package/lib/shared/inline-markup/inline-markup.component.d.ts.map +1 -0
- package/lib/shared/inline-markup/parse-inline-markers.d.ts +45 -0
- package/lib/shared/inline-markup/parse-inline-markers.d.ts.map +1 -0
- package/lib/shared/inline-markup/serialize-inline-markers.d.ts +14 -0
- package/lib/shared/inline-markup/serialize-inline-markers.d.ts.map +1 -0
- package/lib/shared/links/index.d.ts +8 -0
- package/lib/shared/links/index.d.ts.map +1 -0
- package/lib/shared/links/is-safe-href.d.ts +20 -0
- package/lib/shared/links/is-safe-href.d.ts.map +1 -0
- package/lib/shared/links/link-item.d.ts +39 -0
- package/lib/shared/links/link-item.d.ts.map +1 -0
- package/lib/shared/links/parse-inline-link-markers.d.ts +25 -0
- package/lib/shared/links/parse-inline-link-markers.d.ts.map +1 -0
- package/lib/shared/links/resolve-link-attributes.d.ts +13 -0
- package/lib/shared/links/resolve-link-attributes.d.ts.map +1 -0
- package/lib/types.d.ts +113 -0
- package/lib/types.d.ts.map +1 -0
- package/package.json +56 -0
- package/public-api.d.ts +30 -0
- package/public-api.d.ts.map +1 -0
- package/rulecms-source-components-angular.d.ts.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
UNLICENSED
|
|
2
|
+
|
|
3
|
+
Copyright (c) RuleCMS, LLC. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This package is proprietary software of RuleCMS, LLC.
|
|
6
|
+
|
|
7
|
+
Icon geometry redistributed from Lucide (ISC) and Feather (MIT) is covered by
|
|
8
|
+
the notices in THIRD_PARTY_NOTICES. Those notices must be preserved in all
|
|
9
|
+
copies of this package.
|
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# @rulecms/source-components-angular
|
|
2
|
+
|
|
3
|
+
Angular source components for RuleCMS widgets — the Angular counterpart of [`@rulecms/source-components-react`](https://www.npmjs.com/package/@rulecms/source-components-react).
|
|
4
|
+
|
|
5
|
+
Provides the same default-library type ids. Register as the default library on `@rulecms/widget-angular`:
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
libraries: { default: sourceComponents }
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @rulecms/widget-angular @rulecms/source-components-angular
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { Component } from '@angular/core';
|
|
21
|
+
import { RuleCMSWidgetComponent, RuleCMSWidgetProviderComponent } from '@rulecms/widget-angular';
|
|
22
|
+
import * as sourceComponents from '@rulecms/source-components-angular';
|
|
23
|
+
|
|
24
|
+
@Component({
|
|
25
|
+
standalone: true,
|
|
26
|
+
imports: [RuleCMSWidgetProviderComponent, RuleCMSWidgetComponent],
|
|
27
|
+
template: `
|
|
28
|
+
<rulecms-widget-provider [token]="token" [libraries]="libraries">
|
|
29
|
+
<rulecms-widget [publishedKey]="publishedKey" />
|
|
30
|
+
</rulecms-widget-provider>
|
|
31
|
+
`,
|
|
32
|
+
})
|
|
33
|
+
export class PageComponent {
|
|
34
|
+
token = 'your-token';
|
|
35
|
+
publishedKey = 'your-widget-key';
|
|
36
|
+
libraries = { default: sourceComponents };
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Components
|
|
41
|
+
|
|
42
|
+
| Type | Description |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `r-text` | Text in a configurable enclosing tag, with inline links |
|
|
45
|
+
| `cloudinary-advanced-image` | Responsive Cloudinary image |
|
|
46
|
+
| `r-video` | Cloudinary video with poster |
|
|
47
|
+
| `r-icon` | A single Lucide `<svg>` |
|
|
48
|
+
| `r-button` | A `<button>`, or an `<a>` when it links somewhere, styled by preset |
|
|
49
|
+
| `r-divider` | A single `<hr>` separating two sections |
|
|
50
|
+
| `r-embed` | A third-party `<iframe>` from a pasted URL |
|
|
51
|
+
| `r-list` | A `<ul>` or `<ol>`, one item per authored line |
|
|
52
|
+
| `r-accordion` | A `<details>`/`<summary>` disclosure — a summary that expands to its detail, with no JavaScript |
|
|
53
|
+
|
|
54
|
+
The package also exports the library contract that `@rulecms/widget-angular` consumes:
|
|
55
|
+
|
|
56
|
+
- `manifest`, `components`, `editor`
|
|
57
|
+
- `getSourceComponentsPlugin()`, `getComponentMetadataForEditing()`, `getPreviewComponents()`
|
|
58
|
+
- link helpers (`isSafeHref`, `resolveLinkAttributes`, `parseInlineLinkMarkers`)
|
|
59
|
+
- button presets, list/embed/accordion allowlists
|
|
60
|
+
|
|
61
|
+
## Icons
|
|
62
|
+
|
|
63
|
+
`r-icon` renders geometry carried on its own attribute rather than looking a name up at render time. The composer stamps that value when the author picks an icon.
|
|
64
|
+
|
|
65
|
+
Name resolution lives behind a separate entry point that **only the composer** should import:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import { buildIconAttributeValue, searchIconNames } from '@rulecms/source-components-angular/icon-registry';
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Host `onClick`
|
|
72
|
+
|
|
73
|
+
`r-button` reads `onClick` from `widgetInstanceProps`. Address the instance on `rulecms-widget` `[componentProps]` by column id.
|
|
74
|
+
|
|
75
|
+
## Develop locally
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
cd source-components-angular
|
|
79
|
+
npm install
|
|
80
|
+
npm test
|
|
81
|
+
npm run lint
|
|
82
|
+
npm run typecheck
|
|
83
|
+
npm run build
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Publishing
|
|
87
|
+
|
|
88
|
+
Follow `__docs__/RUNBOOK_version-bump-and-release.md`.
|
|
89
|
+
|
|
90
|
+
### Increment version
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Patch version (0.1.0 -> 0.1.1)
|
|
94
|
+
npm run version:patch
|
|
95
|
+
|
|
96
|
+
# Minor version (0.1.0 -> 0.2.0)
|
|
97
|
+
npm run version:minor
|
|
98
|
+
|
|
99
|
+
# Major version (0.1.0 -> 1.0.0)
|
|
100
|
+
npm run version:major
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Publish to npm
|
|
104
|
+
|
|
105
|
+
Push the version tag. GitHub Actions publishes `dist/` via trusted publishing
|
|
106
|
+
(`.github/workflows/publish.yml`). Do not run `npm run release` or
|
|
107
|
+
`npm publish` locally except for the first-ever version of a new package
|
|
108
|
+
(npm cannot attach a trusted publisher until the package exists).
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
git push && git push --tags
|
|
112
|
+
npm view @rulecms/source-components-angular version
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## License
|
|
116
|
+
|
|
117
|
+
UNLICENSED - This is proprietary software for RuleCMS, LLC.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
This package redistributes icon geometry from Lucide via the `lucide-static`
|
|
4
|
+
npm package. Both notices below must be carried verbatim.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
ISC License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2026 Lucide Icons and Contributors
|
|
11
|
+
|
|
12
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
13
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
14
|
+
copyright notice and this permission notice appear in all copies.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
17
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
19
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
20
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
21
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
22
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
The following Lucide icons are derived from the Feather project:
|
|
27
|
+
|
|
28
|
+
airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, calendar, cast, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, circle, clipboard, clock, code, columns, command, compass, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, crosshair, database, divide-circle, divide-square, dollar-sign, download, external-link, feather, frown, hash, headphones, help-circle, info, italic, key, layout, life-buoy, link-2, link, loader, lock, log-in, log-out, maximize, meh, minimize, minimize-2, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, move, music, navigation-2, navigation, octagon, pause-circle, percent, plus-circle, plus-square, plus, power, radio, rss, search, server, share, shopping-bag, sidebar, smartphone, smile, square, table-2, tablet, target, terminal, trash-2, trash, triangle, tv, type, upload, x-circle, x-octagon, x-square, x, zoom-in, zoom-out
|
|
29
|
+
|
|
30
|
+
The MIT License (MIT) (for the icons listed above)
|
|
31
|
+
|
|
32
|
+
Copyright (c) 2013-present Cole Bemis
|
|
33
|
+
|
|
34
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
35
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
36
|
+
in the Software without restriction, including without limitation the rights
|
|
37
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
38
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
39
|
+
furnished to do so, subject to the following conditions:
|
|
40
|
+
|
|
41
|
+
The above copyright notice and this permission notice shall be included in all
|
|
42
|
+
copies or substantial portions of the Software.
|
|
43
|
+
|
|
44
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
45
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
46
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
47
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
48
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
49
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
50
|
+
SOFTWARE.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import iconNodes from 'lucide-static/icon-nodes.json';
|
|
2
|
+
import tags from 'lucide-static/tags.json';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* RuleCMS-owned name aliases. A name that has ever been persisted is never
|
|
6
|
+
* deleted — only aliased here to the current Lucide kebab name.
|
|
7
|
+
*
|
|
8
|
+
* Seeded from Lucide's own rename shims (shape-first convention). Extend on
|
|
9
|
+
* every upstream lucide-static sync; the sync job should fail when an upstream
|
|
10
|
+
* icon disappears without an alias.
|
|
11
|
+
*/
|
|
12
|
+
const ICON_NAME_ALIASES = {
|
|
13
|
+
'alert-circle': 'circle-alert',
|
|
14
|
+
'alert-octagon': 'octagon-alert',
|
|
15
|
+
'alert-triangle': 'triangle-alert',
|
|
16
|
+
'arrow-down-circle': 'circle-arrow-down',
|
|
17
|
+
'arrow-left-circle': 'circle-arrow-left',
|
|
18
|
+
'arrow-right-circle': 'circle-arrow-right',
|
|
19
|
+
'arrow-up-circle': 'circle-arrow-up',
|
|
20
|
+
'check-circle': 'circle-check',
|
|
21
|
+
'check-circle-2': 'circle-check-big',
|
|
22
|
+
'divide-circle': 'circle-divide',
|
|
23
|
+
// Renamed twice upstream: help-circle -> circle-help -> circle-question-mark.
|
|
24
|
+
// Both historical spellings have to land on the current name.
|
|
25
|
+
'help-circle': 'circle-question-mark',
|
|
26
|
+
'circle-help': 'circle-question-mark',
|
|
27
|
+
'minus-circle': 'circle-minus',
|
|
28
|
+
'pause-circle': 'circle-pause',
|
|
29
|
+
'plus-circle': 'circle-plus',
|
|
30
|
+
'stop-circle': 'circle-stop',
|
|
31
|
+
'x-circle': 'circle-x',
|
|
32
|
+
'x-octagon': 'octagon-x',
|
|
33
|
+
'x-square': 'square-x',
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Normalize a persisted RuleCMS icon name to the current Lucide kebab key.
|
|
38
|
+
* Empty / non-string input yields null.
|
|
39
|
+
*/
|
|
40
|
+
const resolveIconName = (name) => {
|
|
41
|
+
if (typeof name !== 'string')
|
|
42
|
+
return null;
|
|
43
|
+
const trimmed = name.trim();
|
|
44
|
+
if (!trimmed)
|
|
45
|
+
return null;
|
|
46
|
+
// Authors may paste PascalCase from Lucide docs; normalize to kebab.
|
|
47
|
+
const kebab = trimmed
|
|
48
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
49
|
+
.replace(/[\s_]+/g, '-')
|
|
50
|
+
.toLowerCase();
|
|
51
|
+
return ICON_NAME_ALIASES[kebab] ?? kebab;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const registry = iconNodes;
|
|
55
|
+
/**
|
|
56
|
+
* Geometry lookup for a persisted icon name.
|
|
57
|
+
*
|
|
58
|
+
* Registry-side only: the render path never calls this. Published payloads
|
|
59
|
+
* carry geometry inline on the attribute (see `buildIconAttributeValue`), so
|
|
60
|
+
* customer pages never load this module or the ~722 KB of JSON behind it.
|
|
61
|
+
*/
|
|
62
|
+
const resolveIconNode = (name) => {
|
|
63
|
+
const resolvedName = resolveIconName(name);
|
|
64
|
+
if (!resolvedName)
|
|
65
|
+
return null;
|
|
66
|
+
return registry[resolvedName] ?? null;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Build the value the composer persists when an author picks an icon.
|
|
70
|
+
*
|
|
71
|
+
* Geometry is stamped at selection rather than at publish so that every
|
|
72
|
+
* surface — composer canvas, dev-environment host apps, staging and
|
|
73
|
+
* production — renders from the same attribute with no registry present.
|
|
74
|
+
* `name` travels alongside so a later sync can re-resolve stale geometry.
|
|
75
|
+
*/
|
|
76
|
+
const buildIconAttributeValue = (name) => {
|
|
77
|
+
const resolvedName = resolveIconName(name);
|
|
78
|
+
if (!resolvedName)
|
|
79
|
+
return null;
|
|
80
|
+
const iconNode = registry[resolvedName];
|
|
81
|
+
if (!iconNode)
|
|
82
|
+
return null;
|
|
83
|
+
return { name: resolvedName, iconNode };
|
|
84
|
+
};
|
|
85
|
+
const isKnownIconName = (name) => {
|
|
86
|
+
const resolved = resolveIconName(name);
|
|
87
|
+
return resolved != null && resolved in registry;
|
|
88
|
+
};
|
|
89
|
+
const listIconNames = () => Object.keys(registry);
|
|
90
|
+
|
|
91
|
+
const tagsByName = tags;
|
|
92
|
+
/**
|
|
93
|
+
* Rank buckets, best first. Name matches beat tag matches because an author
|
|
94
|
+
* typing "rocket" wants the icon called rocket, not everything tagged with it.
|
|
95
|
+
* An exact tag beats a partial one so searching "link" is not buried under
|
|
96
|
+
* everything tagged "linkedin".
|
|
97
|
+
*/
|
|
98
|
+
const NAME_PREFIX = 0;
|
|
99
|
+
const NAME_SUBSTRING = 1;
|
|
100
|
+
const TAG_EXACT = 2;
|
|
101
|
+
const TAG_PARTIAL = 3;
|
|
102
|
+
const rank = (name, query) => {
|
|
103
|
+
if (name.startsWith(query))
|
|
104
|
+
return NAME_PREFIX;
|
|
105
|
+
if (name.includes(query))
|
|
106
|
+
return NAME_SUBSTRING;
|
|
107
|
+
const tags = tagsByName[name];
|
|
108
|
+
if (!tags)
|
|
109
|
+
return -1;
|
|
110
|
+
if (tags.some((tag) => tag === query))
|
|
111
|
+
return TAG_EXACT;
|
|
112
|
+
if (tags.some((tag) => tag.includes(query)))
|
|
113
|
+
return TAG_PARTIAL;
|
|
114
|
+
return -1;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Search icons by name and by Lucide's published tag index.
|
|
118
|
+
*
|
|
119
|
+
* Tag search is why the picker is worth changing: today's name-only list
|
|
120
|
+
* cannot answer "launch" with `rocket`. An empty query returns every name so
|
|
121
|
+
* the picker can show a browsable default.
|
|
122
|
+
*/
|
|
123
|
+
const searchIconNames = (query, limit) => {
|
|
124
|
+
const names = listIconNames();
|
|
125
|
+
const normalized = typeof query === 'string' ? query.trim().toLowerCase() : '';
|
|
126
|
+
if (!normalized) {
|
|
127
|
+
return typeof limit === 'number' ? names.slice(0, limit) : names;
|
|
128
|
+
}
|
|
129
|
+
const matched = names
|
|
130
|
+
.map((name) => ({ name, rank: rank(name, normalized) }))
|
|
131
|
+
.filter((entry) => entry.rank >= 0)
|
|
132
|
+
.sort((a, b) => a.rank - b.rank || a.name.localeCompare(b.name))
|
|
133
|
+
.map((entry) => entry.name);
|
|
134
|
+
return typeof limit === 'number' ? matched.slice(0, limit) : matched;
|
|
135
|
+
};
|
|
136
|
+
/** The tags Lucide publishes for an icon; empty when the name is unknown. */
|
|
137
|
+
const getIconTags = (name) => tagsByName[name] ?? [];
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Generated bundle index. Do not edit.
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
export { ICON_NAME_ALIASES, buildIconAttributeValue, getIconTags, isKnownIconName, listIconNames, resolveIconName, resolveIconNode, searchIconNames };
|
|
144
|
+
//# sourceMappingURL=rulecms-source-components-angular-icon-registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rulecms-source-components-angular-icon-registry.mjs","sources":["../../icon-registry/icon-aliases.ts","../../icon-registry/resolve-icon-name.ts","../../icon-registry/resolve-icon-node.ts","../../icon-registry/search-icon-names.ts","../../icon-registry/rulecms-source-components-angular-icon-registry.ts"],"sourcesContent":["/**\n * RuleCMS-owned name aliases. A name that has ever been persisted is never\n * deleted — only aliased here to the current Lucide kebab name.\n *\n * Seeded from Lucide's own rename shims (shape-first convention). Extend on\n * every upstream lucide-static sync; the sync job should fail when an upstream\n * icon disappears without an alias.\n */\nexport const ICON_NAME_ALIASES: Record<string, string> = {\n 'alert-circle': 'circle-alert',\n 'alert-octagon': 'octagon-alert',\n 'alert-triangle': 'triangle-alert',\n 'arrow-down-circle': 'circle-arrow-down',\n 'arrow-left-circle': 'circle-arrow-left',\n 'arrow-right-circle': 'circle-arrow-right',\n 'arrow-up-circle': 'circle-arrow-up',\n 'check-circle': 'circle-check',\n 'check-circle-2': 'circle-check-big',\n 'divide-circle': 'circle-divide',\n // Renamed twice upstream: help-circle -> circle-help -> circle-question-mark.\n // Both historical spellings have to land on the current name.\n 'help-circle': 'circle-question-mark',\n 'circle-help': 'circle-question-mark',\n 'minus-circle': 'circle-minus',\n 'pause-circle': 'circle-pause',\n 'plus-circle': 'circle-plus',\n 'stop-circle': 'circle-stop',\n 'x-circle': 'circle-x',\n 'x-octagon': 'octagon-x',\n 'x-square': 'square-x',\n};\n","import { ICON_NAME_ALIASES } from './icon-aliases';\n\n/**\n * Normalize a persisted RuleCMS icon name to the current Lucide kebab key.\n * Empty / non-string input yields null.\n */\nexport const resolveIconName = (name: unknown): string | null => {\n if (typeof name !== 'string') return null;\n const trimmed = name.trim();\n if (!trimmed) return null;\n\n // Authors may paste PascalCase from Lucide docs; normalize to kebab.\n const kebab = trimmed\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n\n return ICON_NAME_ALIASES[kebab] ?? kebab;\n};\n","import iconNodes from 'lucide-static/icon-nodes.json';\nimport { resolveIconName } from './resolve-icon-name';\n\nexport type IconNode = [string, Record<string, string>][];\nexport type IconAttributeValue = { name: string; iconNode: IconNode };\n\nconst registry = iconNodes as unknown as Record<string, IconNode>;\n\n/**\n * Geometry lookup for a persisted icon name.\n *\n * Registry-side only: the render path never calls this. Published payloads\n * carry geometry inline on the attribute (see `buildIconAttributeValue`), so\n * customer pages never load this module or the ~722 KB of JSON behind it.\n */\nexport const resolveIconNode = (name: unknown): IconNode | null => {\n const resolvedName = resolveIconName(name);\n if (!resolvedName) return null;\n return registry[resolvedName] ?? null;\n};\n\n/**\n * Build the value the composer persists when an author picks an icon.\n *\n * Geometry is stamped at selection rather than at publish so that every\n * surface — composer canvas, dev-environment host apps, staging and\n * production — renders from the same attribute with no registry present.\n * `name` travels alongside so a later sync can re-resolve stale geometry.\n */\nexport const buildIconAttributeValue = (name: unknown): IconAttributeValue | null => {\n const resolvedName = resolveIconName(name);\n if (!resolvedName) return null;\n\n const iconNode = registry[resolvedName];\n if (!iconNode) return null;\n\n return { name: resolvedName, iconNode };\n};\n\nexport const isKnownIconName = (name: unknown): boolean => {\n const resolved = resolveIconName(name);\n return resolved != null && resolved in registry;\n};\n\nexport const listIconNames = (): string[] => Object.keys(registry);\n","import tags from 'lucide-static/tags.json';\nimport { listIconNames } from './resolve-icon-node';\n\nconst tagsByName = tags as Record<string, string[]>;\n\n/**\n * Rank buckets, best first. Name matches beat tag matches because an author\n * typing \"rocket\" wants the icon called rocket, not everything tagged with it.\n * An exact tag beats a partial one so searching \"link\" is not buried under\n * everything tagged \"linkedin\".\n */\nconst NAME_PREFIX = 0;\nconst NAME_SUBSTRING = 1;\nconst TAG_EXACT = 2;\nconst TAG_PARTIAL = 3;\n\nconst rank = (name: string, query: string): number => {\n if (name.startsWith(query)) return NAME_PREFIX;\n if (name.includes(query)) return NAME_SUBSTRING;\n\n const tags = tagsByName[name];\n if (!tags) return -1;\n if (tags.some((tag) => tag === query)) return TAG_EXACT;\n if (tags.some((tag) => tag.includes(query))) return TAG_PARTIAL;\n return -1;\n};\n\n/**\n * Search icons by name and by Lucide's published tag index.\n *\n * Tag search is why the picker is worth changing: today's name-only list\n * cannot answer \"launch\" with `rocket`. An empty query returns every name so\n * the picker can show a browsable default.\n */\nexport const searchIconNames = (query: unknown, limit?: number): string[] => {\n const names = listIconNames();\n const normalized = typeof query === 'string' ? query.trim().toLowerCase() : '';\n\n if (!normalized) {\n return typeof limit === 'number' ? names.slice(0, limit) : names;\n }\n\n const matched = names\n .map((name) => ({ name, rank: rank(name, normalized) }))\n .filter((entry) => entry.rank >= 0)\n .sort((a, b) => a.rank - b.rank || a.name.localeCompare(b.name))\n .map((entry) => entry.name);\n\n return typeof limit === 'number' ? matched.slice(0, limit) : matched;\n};\n\n/** The tags Lucide publishes for an icon; empty when the name is unknown. */\nexport const getIconTags = (name: string): string[] => tagsByName[name] ?? [];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|