@ship-ui/core 0.19.4 → 0.22.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.
Files changed (153) hide show
  1. package/README.md +3 -0
  2. package/assets/mcp/components.json +32 -4212
  3. package/bin/mcp/index.js +6544 -444
  4. package/bin/ship-fg-scanner +0 -0
  5. package/bin/ship-fg.mjs +18 -16
  6. package/bin/src/subset.ts +3 -1
  7. package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs +42 -0
  8. package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs.map +1 -0
  9. package/fesm2022/ship-ui-core-ship-accordion.mjs +127 -0
  10. package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -0
  11. package/fesm2022/ship-ui-core-ship-alert.mjs +305 -0
  12. package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -0
  13. package/fesm2022/ship-ui-core-ship-blueprint.mjs +1156 -0
  14. package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -0
  15. package/fesm2022/ship-ui-core-ship-button-group.mjs +41 -0
  16. package/fesm2022/ship-ui-core-ship-button-group.mjs.map +1 -0
  17. package/fesm2022/ship-ui-core-ship-button.mjs +38 -0
  18. package/fesm2022/ship-ui-core-ship-button.mjs.map +1 -0
  19. package/fesm2022/ship-ui-core-ship-card.mjs +35 -0
  20. package/fesm2022/ship-ui-core-ship-card.mjs.map +1 -0
  21. package/fesm2022/ship-ui-core-ship-checkbox.mjs +113 -0
  22. package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -0
  23. package/fesm2022/ship-ui-core-ship-chip.mjs +44 -0
  24. package/fesm2022/ship-ui-core-ship-chip.mjs.map +1 -0
  25. package/fesm2022/ship-ui-core-ship-color-picker.mjs +947 -0
  26. package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -0
  27. package/fesm2022/ship-ui-core-ship-datepicker.mjs +951 -0
  28. package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -0
  29. package/fesm2022/ship-ui-core-ship-dialog.mjs +263 -0
  30. package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -0
  31. package/fesm2022/ship-ui-core-ship-divider.mjs +22 -0
  32. package/fesm2022/ship-ui-core-ship-divider.mjs.map +1 -0
  33. package/fesm2022/ship-ui-core-ship-event-card.mjs +50 -0
  34. package/fesm2022/ship-ui-core-ship-event-card.mjs.map +1 -0
  35. package/fesm2022/ship-ui-core-ship-file-upload.mjs +112 -0
  36. package/fesm2022/ship-ui-core-ship-file-upload.mjs.map +1 -0
  37. package/fesm2022/ship-ui-core-ship-form-field.mjs +310 -0
  38. package/fesm2022/ship-ui-core-ship-form-field.mjs.map +1 -0
  39. package/fesm2022/ship-ui-core-ship-icon.mjs +81 -0
  40. package/fesm2022/ship-ui-core-ship-icon.mjs.map +1 -0
  41. package/fesm2022/ship-ui-core-ship-list.mjs +22 -0
  42. package/fesm2022/ship-ui-core-ship-list.mjs.map +1 -0
  43. package/fesm2022/ship-ui-core-ship-menu.mjs +545 -0
  44. package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -0
  45. package/fesm2022/ship-ui-core-ship-popover.mjs +286 -0
  46. package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -0
  47. package/fesm2022/ship-ui-core-ship-progress-bar.mjs +37 -0
  48. package/fesm2022/ship-ui-core-ship-progress-bar.mjs.map +1 -0
  49. package/fesm2022/ship-ui-core-ship-radio.mjs +102 -0
  50. package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -0
  51. package/fesm2022/ship-ui-core-ship-range-slider.mjs +277 -0
  52. package/fesm2022/ship-ui-core-ship-range-slider.mjs.map +1 -0
  53. package/fesm2022/ship-ui-core-ship-select.mjs +971 -0
  54. package/fesm2022/ship-ui-core-ship-select.mjs.map +1 -0
  55. package/fesm2022/ship-ui-core-ship-sidenav.mjs +248 -0
  56. package/fesm2022/ship-ui-core-ship-sidenav.mjs.map +1 -0
  57. package/fesm2022/ship-ui-core-ship-sortable.mjs +485 -0
  58. package/fesm2022/ship-ui-core-ship-sortable.mjs.map +1 -0
  59. package/fesm2022/ship-ui-core-ship-spinner.mjs +28 -0
  60. package/fesm2022/ship-ui-core-ship-spinner.mjs.map +1 -0
  61. package/fesm2022/ship-ui-core-ship-stepper.mjs +76 -0
  62. package/fesm2022/ship-ui-core-ship-stepper.mjs.map +1 -0
  63. package/fesm2022/ship-ui-core-ship-table-filter-bar.mjs +28 -0
  64. package/fesm2022/ship-ui-core-ship-table-filter-bar.mjs.map +1 -0
  65. package/fesm2022/ship-ui-core-ship-table.mjs +442 -0
  66. package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -0
  67. package/fesm2022/ship-ui-core-ship-tabs.mjs +38 -0
  68. package/fesm2022/ship-ui-core-ship-tabs.mjs.map +1 -0
  69. package/fesm2022/ship-ui-core-ship-theme-toggle.mjs +119 -0
  70. package/fesm2022/ship-ui-core-ship-theme-toggle.mjs.map +1 -0
  71. package/fesm2022/ship-ui-core-ship-toggle-card.mjs +75 -0
  72. package/fesm2022/ship-ui-core-ship-toggle-card.mjs.map +1 -0
  73. package/fesm2022/ship-ui-core-ship-toggle.mjs +105 -0
  74. package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -0
  75. package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs +186 -0
  76. package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs.map +1 -0
  77. package/fesm2022/ship-ui-core.mjs +880 -8782
  78. package/fesm2022/ship-ui-core.mjs.map +1 -1
  79. package/package.json +147 -3
  80. package/styles/core.scss +43 -0
  81. package/styles/helpers.scss +2 -0
  82. package/styles/index.scss +12 -123
  83. package/types/ship-ui-core-sh-form-field-experimental.d.ts +11 -0
  84. package/types/ship-ui-core-ship-accordion.d.ts +19 -0
  85. package/types/ship-ui-core-ship-alert.d.ts +68 -0
  86. package/types/ship-ui-core-ship-blueprint.d.ts +112 -0
  87. package/types/ship-ui-core-ship-button-group.d.ts +15 -0
  88. package/types/ship-ui-core-ship-button.d.ts +13 -0
  89. package/types/ship-ui-core-ship-card.d.ts +11 -0
  90. package/types/ship-ui-core-ship-checkbox.d.ts +22 -0
  91. package/types/ship-ui-core-ship-chip.d.ts +15 -0
  92. package/types/ship-ui-core-ship-color-picker.d.ts +105 -0
  93. package/types/ship-ui-core-ship-datepicker.d.ts +96 -0
  94. package/types/ship-ui-core-ship-dialog.d.ts +76 -0
  95. package/types/ship-ui-core-ship-divider.d.ts +8 -0
  96. package/types/ship-ui-core-ship-event-card.d.ts +11 -0
  97. package/types/ship-ui-core-ship-file-upload.d.ts +20 -0
  98. package/types/ship-ui-core-ship-form-field.d.ts +32 -0
  99. package/types/ship-ui-core-ship-icon.d.ts +18 -0
  100. package/types/ship-ui-core-ship-list.d.ts +8 -0
  101. package/types/ship-ui-core-ship-menu.d.ts +49 -0
  102. package/types/ship-ui-core-ship-popover.d.ts +40 -0
  103. package/types/ship-ui-core-ship-progress-bar.d.ts +14 -0
  104. package/types/ship-ui-core-ship-radio.d.ts +22 -0
  105. package/types/ship-ui-core-ship-range-slider.d.ts +31 -0
  106. package/types/ship-ui-core-ship-select.d.ts +81 -0
  107. package/types/ship-ui-core-ship-sidenav.d.ts +36 -0
  108. package/types/ship-ui-core-ship-sortable.d.ts +72 -0
  109. package/types/ship-ui-core-ship-spinner.d.ts +10 -0
  110. package/types/ship-ui-core-ship-stepper.d.ts +13 -0
  111. package/types/ship-ui-core-ship-table-filter-bar.d.ts +8 -0
  112. package/types/ship-ui-core-ship-table.d.ts +69 -0
  113. package/types/ship-ui-core-ship-tabs.d.ts +14 -0
  114. package/types/ship-ui-core-ship-theme-toggle.d.ts +28 -0
  115. package/types/ship-ui-core-ship-toggle-card.d.ts +15 -0
  116. package/types/ship-ui-core-ship-toggle.d.ts +21 -0
  117. package/types/ship-ui-core-ship-virtual-scroll.d.ts +22 -0
  118. package/types/ship-ui-core.d.ts +88 -1070
  119. package/styles/components/ship-accordion.scss +0 -113
  120. package/styles/components/ship-alert-container.scss +0 -49
  121. package/styles/components/ship-alert.scss +0 -177
  122. package/styles/components/ship-blueprint.scss +0 -242
  123. package/styles/components/ship-button-group.scss +0 -165
  124. package/styles/components/ship-button.scss +0 -141
  125. package/styles/components/ship-card.scss +0 -56
  126. package/styles/components/ship-checkbox.scss +0 -116
  127. package/styles/components/ship-chip.scss +0 -104
  128. package/styles/components/ship-color-picker.scss +0 -150
  129. package/styles/components/ship-datepicker.scss +0 -317
  130. package/styles/components/ship-dialog.scss +0 -152
  131. package/styles/components/ship-divider.scss +0 -27
  132. package/styles/components/ship-event-card.scss +0 -51
  133. package/styles/components/ship-file-upload.scss +0 -47
  134. package/styles/components/ship-form-field.scss +0 -408
  135. package/styles/components/ship-icon.scss +0 -54
  136. package/styles/components/ship-list.scss +0 -165
  137. package/styles/components/ship-menu.scss +0 -237
  138. package/styles/components/ship-popover.scss +0 -205
  139. package/styles/components/ship-progress-bar.scss +0 -173
  140. package/styles/components/ship-radio.scss +0 -113
  141. package/styles/components/ship-range-slider.scss +0 -421
  142. package/styles/components/ship-select.scss +0 -153
  143. package/styles/components/ship-sidenav.scss +0 -195
  144. package/styles/components/ship-sortable.scss +0 -45
  145. package/styles/components/ship-spinner.scss +0 -53
  146. package/styles/components/ship-stepper.scss +0 -158
  147. package/styles/components/ship-table.scss +0 -443
  148. package/styles/components/ship-tabs.scss +0 -125
  149. package/styles/components/ship-theme-toggle.scss +0 -41
  150. package/styles/components/ship-toggle-card.scss +0 -69
  151. package/styles/components/ship-toggle.scss +0 -255
  152. package/styles/components/ship-tooltip.scss +0 -151
  153. package/styles/components/ship-virtual-scroll.scss +0 -12
Binary file
package/bin/ship-fg.mjs CHANGED
@@ -199,7 +199,7 @@ var require_compress_binding = __commonJS((exports, module) => {
199
199
  setWindowTitle = function(title) {
200
200
  document.title = title;
201
201
  };
202
- } else {}
202
+ }
203
203
  var out = Module["print"] || console.log.bind(console);
204
204
  var err = Module["printErr"] || console.warn.bind(console);
205
205
  for (key in moduleOverrides) {
@@ -1083,7 +1083,7 @@ var require_compress_binding = __commonJS((exports, module) => {
1083
1083
  invokerFnBody += `var ret = retType.fromWireType(rv);
1084
1084
  ` + `return ret;
1085
1085
  `;
1086
- } else {}
1086
+ }
1087
1087
  invokerFnBody += `}
1088
1088
  `;
1089
1089
  args1.push(invokerFnBody);
@@ -1805,7 +1805,7 @@ var require_decompress_binding = __commonJS((exports, module) => {
1805
1805
  setWindowTitle = function(title) {
1806
1806
  document.title = title;
1807
1807
  };
1808
- } else {}
1808
+ }
1809
1809
  var out = Module["print"] || console.log.bind(console);
1810
1810
  var err = Module["printErr"] || console.warn.bind(console);
1811
1811
  for (key in moduleOverrides) {
@@ -2685,7 +2685,7 @@ var require_decompress_binding = __commonJS((exports, module) => {
2685
2685
  invokerFnBody += `var ret = retType.fromWireType(rv);
2686
2686
  ` + `return ret;
2687
2687
  `;
2688
- } else {}
2688
+ }
2689
2689
  invokerFnBody += `}
2690
2690
  `;
2691
2691
  args1.push(invokerFnBody);
@@ -3236,7 +3236,7 @@ import { parseArgs } from "util";
3236
3236
  import { spawnSync } from "child_process";
3237
3237
  import { watch } from "fs";
3238
3238
  import { readFile as readFile2, writeFile, readdir, mkdir } from "fs/promises";
3239
- import { dirname, join, resolve } from "path";
3239
+ import { dirname as dirname2, join, resolve as resolve2 } from "path";
3240
3240
  import { fileURLToPath } from "url";
3241
3241
  import { gzipSync } from "zlib";
3242
3242
 
@@ -3244,12 +3244,14 @@ import { gzipSync } from "zlib";
3244
3244
  var import_wawoff2 = __toESM(require_wawoff2(), 1);
3245
3245
  import { readFile } from "fs/promises";
3246
3246
  import { createRequire as createRequire2 } from "module";
3247
+ import { dirname, resolve } from "path";
3247
3248
  var require2 = createRequire2(import.meta.url);
3248
3249
  var harfbuzzInst = null;
3249
3250
  async function loadAndInitializeHarfbuzz() {
3250
3251
  if (harfbuzzInst)
3251
3252
  return harfbuzzInst;
3252
- const wasmPath = require2.resolve("harfbuzzjs/hb-subset.wasm");
3253
+ const mainEntry = require2.resolve("harfbuzzjs");
3254
+ const wasmPath = resolve(dirname(mainEntry), "harfbuzz-subset.wasm");
3253
3255
  const wasmBuffer = await readFile(wasmPath);
3254
3256
  const { instance } = await WebAssembly.instantiate(wasmBuffer);
3255
3257
  const harfbuzzJsWasm = instance.exports;
@@ -3323,14 +3325,14 @@ function formatFileSize(bytes, dm = 2) {
3323
3325
  }
3324
3326
 
3325
3327
  // bin/src/ship-fg.ts
3326
- var _dirname = dirname(fileURLToPath(import.meta.url));
3328
+ var _dirname = dirname2(fileURLToPath(import.meta.url));
3327
3329
  var CWD_PATH = process.cwd();
3328
- var PHOSPHOR_SRC_PATH = resolve(CWD_PATH, "node_modules", "@phosphor-icons", "web", "src");
3330
+ var PHOSPHOR_SRC_PATH = resolve2(CWD_PATH, "node_modules", "@phosphor-icons", "web", "src");
3329
3331
  var jsScannerFallback = async (PROJECT_SRC, shipUiDir, CWD_PATH2) => {
3330
3332
  const uniqueIcons = new Set;
3331
3333
  const isValidIcon = (s) => /^[a-z0-9-]+$/.test(s);
3332
3334
  try {
3333
- const pkgPath = resolve(shipUiDir, "package.json");
3335
+ const pkgPath = resolve2(shipUiDir, "package.json");
3334
3336
  const pkgData = JSON.parse(await readFile2(pkgPath, "utf8"));
3335
3337
  if (pkgData.libraryIcons) {
3336
3338
  pkgData.libraryIcons.forEach((i) => uniqueIcons.add(i));
@@ -3341,7 +3343,7 @@ var jsScannerFallback = async (PROJECT_SRC, shipUiDir, CWD_PATH2) => {
3341
3343
  for (const entry of entries) {
3342
3344
  if (entry.name === "node_modules" || entry.name.startsWith("."))
3343
3345
  continue;
3344
- const fullPath = resolve(dir, entry.name);
3346
+ const fullPath = resolve2(dir, entry.name);
3345
3347
  if (entry.isDirectory()) {
3346
3348
  await scanDir(fullPath);
3347
3349
  } else if (entry.name.endsWith(".html") || entry.name.endsWith(".ts")) {
@@ -3372,7 +3374,7 @@ var jsScannerFallback = async (PROJECT_SRC, shipUiDir, CWD_PATH2) => {
3372
3374
  const glyphMaps = new Map;
3373
3375
  for (const variant of variants) {
3374
3376
  try {
3375
- const selPath = resolve(CWD_PATH2, "node_modules", "@phosphor-icons", "web", "src", variant, "selection.json");
3377
+ const selPath = resolve2(CWD_PATH2, "node_modules", "@phosphor-icons", "web", "src", variant, "selection.json");
3376
3378
  const parsed = JSON.parse(await readFile2(selPath, "utf8"));
3377
3379
  const isDuotone = variant === "duotone";
3378
3380
  for (const icon of parsed.icons || []) {
@@ -3430,8 +3432,8 @@ var watchers = [];
3430
3432
  var run = async (PROJECT_SRC, PROJECT_PUBLIC, TARGET_FONT_TYPE, values) => {
3431
3433
  const startTime = performance.now();
3432
3434
  const actualDir = _dirname;
3433
- const scannerPath = resolve(actualDir, "./ship-fg-scanner");
3434
- const shipUiDir = resolve(actualDir, "../");
3435
+ const scannerPath = resolve2(actualDir, "./ship-fg-scanner");
3436
+ const shipUiDir = resolve2(actualDir, "../");
3435
3437
  let groupedIcons = {};
3436
3438
  let missingIconsArray = [];
3437
3439
  try {
@@ -3589,10 +3591,10 @@ function capitalize(str) {
3589
3591
  var main = async (values) => {
3590
3592
  const TARGET_FONT_TYPE = "woff2";
3591
3593
  const actualDir = _dirname;
3592
- const packageJsonPath = resolve(actualDir, "../package.json");
3594
+ const packageJsonPath = resolve2(actualDir, "../package.json");
3593
3595
  const PROJECT_SRC = values.src;
3594
3596
  const PROJECT_PUBLIC = values.out;
3595
- const selectionJsonPath = resolve(PHOSPHOR_SRC_PATH, "regular", "selection.json");
3597
+ const selectionJsonPath = resolve2(PHOSPHOR_SRC_PATH, "regular", "selection.json");
3596
3598
  const selectionData = await readFile2(selectionJsonPath, "utf8");
3597
3599
  const GLYPH_MAP = JSON.parse(selectionData).icons.reduce((acc, iconWrapper) => {
3598
3600
  const name = iconWrapper.properties.name;
@@ -3627,7 +3629,7 @@ Watching for file changes. Press Cmd+C to stop.`);
3627
3629
  if (values.watch) {
3628
3630
  const excludeFolders = ["node_modules", ".git", ".vscode", "bin", "assets"].concat([PROJECT_PUBLIC]);
3629
3631
  watchers.push(watch(PROJECT_SRC, { recursive: true }, (_, filename) => {
3630
- if (filename && !excludeFolders.some((folder) => resolve(join(PROJECT_SRC, filename)).includes(folder))) {
3632
+ if (filename && !excludeFolders.some((folder) => resolve2(join(PROJECT_SRC, filename)).includes(folder))) {
3631
3633
  debouncedRun(filename);
3632
3634
  }
3633
3635
  }));
package/bin/src/subset.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { readFile } from 'fs/promises';
2
2
  import { createRequire } from 'module';
3
+ import { dirname, resolve } from 'path';
3
4
 
4
5
  const require = createRequire(import.meta.url);
5
6
 
@@ -11,7 +12,8 @@ let harfbuzzInst: { harfbuzzJsWasm: any; heapu8: Uint8Array } | null = null;
11
12
  async function loadAndInitializeHarfbuzz() {
12
13
  if (harfbuzzInst) return harfbuzzInst;
13
14
 
14
- const wasmPath = require.resolve('harfbuzzjs/hb-subset.wasm');
15
+ const mainEntry = require.resolve('harfbuzzjs');
16
+ const wasmPath = resolve(dirname(mainEntry), 'harfbuzz-subset.wasm');
15
17
  const wasmBuffer = await readFile(wasmPath);
16
18
  const { instance } = await WebAssembly.instantiate(wasmBuffer);
17
19
  const harfbuzzJsWasm = instance.exports as any;
@@ -0,0 +1,42 @@
1
+ import * as i0 from '@angular/core';
2
+ import { effect, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { createFormInputSignal } from '@ship-ui/core';
4
+
5
+ class ShipFormFieldExperimental {
6
+ constructor() {
7
+ this.firstInput = createFormInputSignal();
8
+ this.hello = effect(() => {
9
+ console.log('hello', this.firstInput());
10
+ }, /* @ts-ignore */
11
+ ...(ngDevMode ? [{ debugName: "hello" }] : /* istanbul ignore next */ []));
12
+ }
13
+ myClick() {
14
+ this.firstInput.update((x) => x + 'hello');
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipFormFieldExperimental, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: ShipFormFieldExperimental, isStandalone: true, selector: "sh-form-field-experimental", ngImport: i0, template: `
18
+ <ng-content></ng-content>
19
+
20
+ <button (click)="myClick()">hello</button>
21
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipFormFieldExperimental, decorators: [{
24
+ type: Component,
25
+ args: [{
26
+ selector: 'sh-form-field-experimental',
27
+ imports: [],
28
+ template: `
29
+ <ng-content></ng-content>
30
+
31
+ <button (click)="myClick()">hello</button>
32
+ `,
33
+ changeDetection: ChangeDetectionStrategy.OnPush,
34
+ }]
35
+ }] });
36
+
37
+ /**
38
+ * Generated bundle index. Do not edit.
39
+ */
40
+
41
+ export { ShipFormFieldExperimental };
42
+ //# sourceMappingURL=ship-ui-core-sh-form-field-experimental.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-sh-form-field-experimental.mjs","sources":["../../../projects/ship-ui/sh-form-field-experimental/sh-form-field-experimental.ts","../../../projects/ship-ui/sh-form-field-experimental/ship-ui-core-sh-form-field-experimental.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect } from '@angular/core';\nimport { createFormInputSignal } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-form-field-experimental',\n imports: [],\n template: `\n <ng-content></ng-content>\n\n <button (click)=\"myClick()\">hello</button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFormFieldExperimental {\n firstInput = createFormInputSignal();\n\n hello = effect(() => {\n console.log('hello', this.firstInput());\n });\n\n myClick() {\n this.firstInput.update((x) => x + 'hello');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAaa,yBAAyB,CAAA;AAVtC,IAAA,WAAA,GAAA;QAWE,IAAA,CAAA,UAAU,GAAG,qBAAqB,EAAE;AAEpC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAK;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;kFAAC;AAKH,IAAA;IAHC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAC5C;8GATW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAP1B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAVrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACZD;;AAEG;;;;"}
@@ -0,0 +1,127 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, input, model, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { shipComponentClasses, contentProjectionSignal } from '@ship-ui/core';
4
+
5
+ class ShipAccordion {
6
+ constructor() {
7
+ this.selfElement = inject((ElementRef)).nativeElement;
8
+ this.name = input(`sh-accordion-${Math.random().toString(36).substring(2, 9)}`, /* @ts-ignore */
9
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
10
+ this.value = model(null, /* @ts-ignore */
11
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
12
+ this.allowMultiple = input(false, /* @ts-ignore */
13
+ ...(ngDevMode ? [{ debugName: "allowMultiple" }] : /* istanbul ignore next */ []));
14
+ this.variant = input(null, /* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
16
+ this.size = input(null, /* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
18
+ this.hostClasses = shipComponentClasses('accordion', {
19
+ variant: this.variant,
20
+ size: this.size,
21
+ });
22
+ this.items = contentProjectionSignal('details', {
23
+ childList: true,
24
+ subtree: true,
25
+ attributes: true,
26
+ attributeFilter: ['open', 'value'],
27
+ });
28
+ this.selfElement.addEventListener('toggle', this.onToggle.bind(this), true);
29
+ effect(() => {
30
+ const isMultiple = this.allowMultiple();
31
+ const groupName = this.name();
32
+ const valStr = this.value();
33
+ const vals = valStr ? valStr.split(',').filter((v) => v !== '') : [];
34
+ this.items().forEach((details) => {
35
+ if (!isMultiple) {
36
+ details.setAttribute('name', groupName);
37
+ }
38
+ else {
39
+ details.removeAttribute('name');
40
+ }
41
+ const summary = details.querySelector('summary');
42
+ if (summary && !summary.querySelector('sh-icon')) {
43
+ const icon = document.createElement('sh-icon');
44
+ icon.textContent = 'caret-down';
45
+ summary.appendChild(icon);
46
+ }
47
+ let contentWrapper = details.querySelector(':scope > .content');
48
+ if (!contentWrapper) {
49
+ const newWrapper = document.createElement('div');
50
+ newWrapper.className = 'content';
51
+ const childrenToMove = Array.from(details.childNodes).filter((node) => {
52
+ if (node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() === 'summary') {
53
+ return false;
54
+ }
55
+ return true;
56
+ });
57
+ childrenToMove.forEach((child) => newWrapper.appendChild(child));
58
+ details.appendChild(newWrapper);
59
+ contentWrapper = newWrapper;
60
+ }
61
+ const itemVal = details.getAttribute('value');
62
+ if (itemVal && vals.includes(itemVal)) {
63
+ // Avoid triggering endless loops by only setting open if it actually changed
64
+ if (!details.open)
65
+ details.open = true;
66
+ }
67
+ else if (itemVal) {
68
+ if (details.open)
69
+ details.open = false;
70
+ }
71
+ });
72
+ });
73
+ }
74
+ onToggle(event) {
75
+ const target = event.target;
76
+ if (target.tagName !== 'DETAILS')
77
+ return;
78
+ if (!this.selfElement.contains(target))
79
+ return;
80
+ const itemVal = target.getAttribute('value');
81
+ if (!itemVal)
82
+ return; // Uncontrolled details element
83
+ const isOpen = target.open;
84
+ if (this.allowMultiple()) {
85
+ let vals = this.value()
86
+ ? this.value()
87
+ .split(',')
88
+ .filter((v) => v !== '')
89
+ : [];
90
+ if (isOpen && !vals.includes(itemVal))
91
+ vals.push(itemVal);
92
+ if (!isOpen)
93
+ vals = vals.filter((v) => v !== itemVal);
94
+ this.value.set(vals.join(','));
95
+ }
96
+ else {
97
+ if (isOpen) {
98
+ this.value.set(itemVal);
99
+ }
100
+ else {
101
+ if (this.value() === itemVal) {
102
+ this.value.set(null);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipAccordion, isStandalone: true, selector: "sh-accordion", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, allowMultiple: { classPropertyName: "allowMultiple", publicName: "allowMultiple", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.sh-accordion": "true", "class": "hostClasses()" } }, ngImport: i0, template: `
109
+ <ng-content></ng-content>
110
+ `, isInline: true, styles: ["sh-accordion{--acc-pad: 1rem;--acc-f: var(--paragraph-30);--acc-bc: var(--base-4);--acc-s: var(--shape-2);display:flex;flex-direction:column;border:var(--border-10);border-color:var(--acc-bc);border-radius:var(--acc-s);overflow:hidden;background:var(--base-1)}sh-accordion:empty{display:none}sh-accordion.small{--acc-pad: .75rem;--acc-f: var(--paragraph-40)}sh-accordion.type-b{--acc-s: 0;width:100%;height:100%;border:0;overflow:auto}sh-accordion.type-b>details:last-child{border-bottom:var(--border-10)}sh-accordion details{width:100%}sh-accordion details.disabled{opacity:.5;pointer-events:none}sh-accordion details.disabled summary{cursor:not-allowed}sh-accordion details>summary{list-style:none}sh-accordion details>summary::-webkit-details-marker{display:none}sh-accordion details>summary{display:flex;align-items:center;padding:var(--acc-pad);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .2s;font-weight:500;font-size:var(--acc-f);border-bottom:var(--border-10);border-color:var(--acc-bc)}sh-accordion details>summary:focus-visible{outline:2px solid var(--primary-8);outline-offset:-2px;border-radius:var(--acc-s)}sh-accordion details>summary sh-icon{transition:transform .2s cubic-bezier(.4,0,.2,1);color:var(--mono-11);margin-left:auto}sh-accordion details:last-child>summary{border-bottom:0}sh-accordion details[open]>summary{border-bottom:var(--border-10);border-color:var(--acc-bc)}sh-accordion details[open]>summary sh-icon{transform:rotate(180deg)}sh-accordion details[open]+details{border-top:var(--border-10);border-color:var(--acc-bc)}sh-accordion details>.content{padding:var(--acc-pad);background:var(--base-2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
111
+ }
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipAccordion, decorators: [{
113
+ type: Component,
114
+ args: [{ selector: 'sh-accordion', encapsulation: ViewEncapsulation.None, template: `
115
+ <ng-content></ng-content>
116
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
117
+ '[class.sh-accordion]': 'true',
118
+ '[class]': 'hostClasses()',
119
+ }, styles: ["sh-accordion{--acc-pad: 1rem;--acc-f: var(--paragraph-30);--acc-bc: var(--base-4);--acc-s: var(--shape-2);display:flex;flex-direction:column;border:var(--border-10);border-color:var(--acc-bc);border-radius:var(--acc-s);overflow:hidden;background:var(--base-1)}sh-accordion:empty{display:none}sh-accordion.small{--acc-pad: .75rem;--acc-f: var(--paragraph-40)}sh-accordion.type-b{--acc-s: 0;width:100%;height:100%;border:0;overflow:auto}sh-accordion.type-b>details:last-child{border-bottom:var(--border-10)}sh-accordion details{width:100%}sh-accordion details.disabled{opacity:.5;pointer-events:none}sh-accordion details.disabled summary{cursor:not-allowed}sh-accordion details>summary{list-style:none}sh-accordion details>summary::-webkit-details-marker{display:none}sh-accordion details>summary{display:flex;align-items:center;padding:var(--acc-pad);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .2s;font-weight:500;font-size:var(--acc-f);border-bottom:var(--border-10);border-color:var(--acc-bc)}sh-accordion details>summary:focus-visible{outline:2px solid var(--primary-8);outline-offset:-2px;border-radius:var(--acc-s)}sh-accordion details>summary sh-icon{transition:transform .2s cubic-bezier(.4,0,.2,1);color:var(--mono-11);margin-left:auto}sh-accordion details:last-child>summary{border-bottom:0}sh-accordion details[open]>summary{border-bottom:var(--border-10);border-color:var(--acc-bc)}sh-accordion details[open]>summary sh-icon{transform:rotate(180deg)}sh-accordion details[open]+details{border-top:var(--border-10);border-color:var(--acc-bc)}sh-accordion details>.content{padding:var(--acc-pad);background:var(--base-2)}\n"] }]
120
+ }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], allowMultiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowMultiple", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
121
+
122
+ /**
123
+ * Generated bundle index. Do not edit.
124
+ */
125
+
126
+ export { ShipAccordion };
127
+ //# sourceMappingURL=ship-ui-core-ship-accordion.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-accordion.mjs","sources":["../../../projects/ship-ui/ship-accordion/ship-accordion.ts","../../../projects/ship-ui/ship-accordion/ship-ui-core-ship-accordion.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n model,\n ViewEncapsulation,\n} from '@angular/core';\nimport { contentProjectionSignal, shipComponentClasses, ShipVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-accordion',\n styleUrl: './ship-accordion.scss',\n encapsulation: ViewEncapsulation.None,\n template: `\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.sh-accordion]': 'true',\n '[class]': 'hostClasses()',\n },\n})\nexport class ShipAccordion {\n private selfElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n readonly name = input<string>(`sh-accordion-${Math.random().toString(36).substring(2, 9)}`);\n readonly value = model<string | null>(null);\n readonly allowMultiple = input<boolean>(false);\n readonly variant = input<ShipVariant | null>(null);\n readonly size = input<string | null>(null);\n\n hostClasses = shipComponentClasses('accordion', {\n variant: this.variant,\n size: this.size,\n });\n\n protected items = contentProjectionSignal<HTMLDetailsElement>('details', {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['open', 'value'],\n });\n\n constructor() {\n this.selfElement.addEventListener('toggle', this.onToggle.bind(this), true);\n\n effect(() => {\n const isMultiple = this.allowMultiple();\n const groupName = this.name();\n const valStr = this.value();\n const vals = valStr ? valStr.split(',').filter((v) => v !== '') : [];\n\n this.items().forEach((details) => {\n if (!isMultiple) {\n details.setAttribute('name', groupName);\n } else {\n details.removeAttribute('name');\n }\n\n const summary = details.querySelector('summary');\n if (summary && !summary.querySelector('sh-icon')) {\n const icon = document.createElement('sh-icon');\n icon.textContent = 'caret-down';\n summary.appendChild(icon);\n }\n\n let contentWrapper = details.querySelector(':scope > .content');\n\n if (!contentWrapper) {\n const newWrapper = document.createElement('div');\n newWrapper.className = 'content';\n const childrenToMove = Array.from(details.childNodes).filter((node) => {\n if (node.nodeType === Node.ELEMENT_NODE && (node as Element).tagName.toLowerCase() === 'summary') {\n return false;\n }\n return true;\n });\n childrenToMove.forEach((child) => newWrapper.appendChild(child));\n details.appendChild(newWrapper);\n contentWrapper = newWrapper;\n }\n\n const itemVal = details.getAttribute('value');\n if (itemVal && vals.includes(itemVal)) {\n // Avoid triggering endless loops by only setting open if it actually changed\n if (!details.open) details.open = true;\n } else if (itemVal) {\n if (details.open) details.open = false;\n }\n });\n });\n }\n\n onToggle(event: Event) {\n const target = event.target as HTMLDetailsElement;\n if (target.tagName !== 'DETAILS') return;\n if (!this.selfElement.contains(target)) return;\n\n const itemVal = target.getAttribute('value');\n if (!itemVal) return; // Uncontrolled details element\n\n const isOpen = target.open;\n\n if (this.allowMultiple()) {\n let vals = this.value()\n ? this.value()!\n .split(',')\n .filter((v) => v !== '')\n : [];\n if (isOpen && !vals.includes(itemVal)) vals.push(itemVal);\n if (!isOpen) vals = vals.filter((v) => v !== itemVal);\n this.value.set(vals.join(','));\n } else {\n if (isOpen) {\n this.value.set(itemVal);\n } else {\n if (this.value() === itemVal) {\n this.value.set(null);\n }\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}