@ship-ui/core 0.18.13 → 0.19.1

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,7 +1,7 @@
1
1
  {
2
2
  "name": "@ship-ui/core",
3
3
  "license": "MIT",
4
- "version": "0.18.13",
4
+ "version": "0.19.1",
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=20",
7
7
  "@angular/core": ">=20",
@@ -23,13 +23,13 @@
23
23
  }
24
24
  ],
25
25
  "dependencies": {
26
- "subset-font": "^2.3.0",
27
26
  "@phosphor-icons/web": "^2.1.1",
28
- "glob": "13.0.2",
27
+ "harfbuzzjs": "^0.10.1",
28
+ "wawoff2": "^2.0.1",
29
29
  "tslib": "^2.3.0"
30
30
  },
31
31
  "bin": {
32
- "ship-fg": "./bin/ship-fg-node",
32
+ "ship-fg": "./bin/ship-fg.mjs",
33
33
  "ship-mcp": "./bin/mcp/index.js"
34
34
  },
35
35
  "libraryIcons": [
@@ -72,5 +72,6 @@
72
72
  },
73
73
  "sideEffects": false,
74
74
  "module": "fesm2022/ship-ui-core.mjs",
75
- "typings": "types/ship-ui-core.d.ts"
75
+ "typings": "types/ship-ui-core.d.ts",
76
+ "type": "module"
76
77
  }
@@ -34,13 +34,6 @@
34
34
  ],
35
35
  "description": "Basic usage of ShipSortable"
36
36
  },
37
- "GridSortable: Basic": {
38
- "prefix": "shGridSortable",
39
- "body": [
40
- "<div shGridSortable>$0</div>"
41
- ],
42
- "description": "Basic usage of GridSortable"
43
- },
44
37
  "ShipColorPickerInput: Basic": {
45
38
  "prefix": "sh-color-picker-input",
46
39
  "body": [
@@ -29,13 +29,13 @@ $shipSidenav: true !default;
29
29
  height: 100%;
30
30
  overflow: auto;
31
31
  padding: p2r(16 16 16 0);
32
+ background-color: var(--base-1);
32
33
  }
33
34
 
34
35
  main {
35
36
  overflow-x: hidden;
36
37
  overflow-y: auto;
37
38
  -webkit-overflow-scrolling: auto;
38
- background-color: var(--base-1);
39
39
  border: var(--border-10);
40
40
  border-radius: var(--shape-3);
41
41
  height: calc(100vh - 2rem);
@@ -3,11 +3,13 @@
3
3
  $shipSortable: true !default;
4
4
 
5
5
  @if $shipSortable == true {
6
- [shSortable] {
6
+ .sh-sortable {
7
7
  position: relative;
8
8
 
9
9
  &.dragging {
10
- [draggable] {
10
+ [draggable],
11
+ .sortable-ghost {
12
+ cursor: grabbing;
11
13
  transition: transform 40ms linear;
12
14
  }
13
15
  }
@@ -18,33 +20,22 @@ $shipSortable: true !default;
18
20
  transition: none;
19
21
  z-index: 2;
20
22
  background: var(--base-1);
23
+ user-select: none;
21
24
 
22
- &:has(:not([sort-handle])) {
25
+ &:not(:has([sort-handle])) {
23
26
  cursor: grab;
24
27
  }
25
28
  }
26
29
 
27
- .sortable-placeholder {
28
- position: absolute;
29
- top: 0;
30
- z-index: 1;
31
-
32
- &.active {
33
- z-index: 1;
34
- background-color: var(--base-6);
35
- border: var(--border-20);
36
- opacity: 0.5;
37
- }
30
+ .sortable-ghost {
31
+ opacity: 0.5;
32
+ z-index: 10;
38
33
  }
39
34
 
40
- .sortable-ghost,
41
- .sortable-ghost.active {
42
- opacity: 1;
43
- }
44
-
45
- .sortable-dragged-el.active,
46
- .sortable-dragged-el {
47
- opacity: 0;
35
+ &.item-dragged-out {
36
+ .sortable-ghost {
37
+ display: none;
38
+ }
48
39
  }
49
40
 
50
41
  [sort-handle] {
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ElementRef, QueryList, TemplateRef, OutputEmitterRef, InputSignal, ComponentRef, EmbeddedViewRef, OutputRefSubscription, Type, AfterViewInit, OnDestroy, AfterContentInit, WritableSignal, InjectionToken } from '@angular/core';
2
+ import { ElementRef, QueryList, TemplateRef, OutputEmitterRef, InputSignal, ComponentRef, EmbeddedViewRef, OutputRefSubscription, Type, AfterViewInit, OnDestroy, AfterContentInit, WritableSignal, OnInit, InjectionToken } from '@angular/core';
3
3
  import { NgModel } from '@angular/forms';
4
+ import { Observable } from 'rxjs';
4
5
 
5
6
  type ShipColor = 'primary' | 'accent' | 'warn' | 'error' | 'success' | (string & {});
6
7
  type ShipSize = 'small' | 'xsmall' | (string & {});
@@ -267,11 +268,12 @@ declare abstract class ShipSelectionGroup<T = any> {
267
268
  protected readonly hostElement: any;
268
269
  protected items: _angular_core.Signal<HTMLElement[]>;
269
270
  readonly value: _angular_core.ModelSignal<T | null>;
271
+ readonly closable: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
270
272
  constructor(itemSelector: string, activeClass: string);
271
273
  protected onClick(target: EventTarget | null): void;
272
274
  protected onKeyDown(event: KeyboardEvent): void;
273
275
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShipSelectionGroup<any>, never>;
274
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ShipSelectionGroup<any>, never, never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
276
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ShipSelectionGroup<any>, never, never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
275
277
  }
276
278
 
277
279
  declare class ShipButtonGroup extends ShipSelectionGroup<string> {
@@ -808,41 +810,71 @@ declare class ShipSidenav {
808
810
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShipSidenav, "sh-sidenav", never, { "disableDrag": { "alias": "disableDrag"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; }, never, ["[sidenav]", "[sidenav-closed-topbar]", "*"], true, never>;
809
811
  }
810
812
 
811
- declare class GridSortable {
812
- #private;
813
- onDragStart(event: DragEvent): void;
814
- onDragOver(event: DragEvent): void;
815
- onDragEnter(event: DragEvent): void;
816
- private updateOrder;
817
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridSortable, never>;
818
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridSortable, "[shGridSortable]", never, {}, {}, never, never, true, never>;
819
- }
820
-
821
813
  type AfterDropResponse = {
822
814
  fromIndex: number;
823
815
  toIndex: number;
824
816
  };
825
- declare class ShipSortable {
817
+ type CrossDropResponse = {
818
+ previousContainer: ShipSortable;
819
+ currentContainer: ShipSortable;
820
+ previousIndex: number;
821
+ currentIndex: number;
822
+ };
823
+ type ShipDropEvent = {
824
+ previousContainer: ShipSortable;
825
+ container: ShipSortable;
826
+ previousIndex: number;
827
+ currentIndex: number;
828
+ };
829
+ interface SortableManagerConfig {
830
+ /**
831
+ * If provided, this hook is evaluated before the Signals are modified.
832
+ * Return `true`/`Observable<true>` to accept the drop, or false to reject.
833
+ */
834
+ onBeforeDrop?: (event: ShipDropEvent) => boolean | Promise<boolean> | Observable<boolean>;
835
+ }
836
+ declare function createSortableManager<T>(signals: WritableSignal<T[]> | Record<string, WritableSignal<T[]>>, config?: SortableManagerConfig): {
837
+ drop(event: ShipDropEvent): Promise<void>;
838
+ };
839
+ declare class ShipSortable implements OnInit, OnDestroy {
826
840
  #private;
827
- dragStartIndex: _angular_core.WritableSignal<number>;
828
- dragToIndex: _angular_core.WritableSignal<number>;
829
- dragables: _angular_core.WritableSignal<HTMLElement[]>;
841
+ shSortable: _angular_core.InputSignal<any>;
842
+ sortableGroup: _angular_core.InputSignal<string | undefined>;
843
+ sortDrop: _angular_core.OutputEmitterRef<ShipDropEvent>;
830
844
  afterDrop: _angular_core.OutputEmitterRef<AfterDropResponse>;
845
+ crossDrop: _angular_core.OutputEmitterRef<CrossDropResponse>;
846
+ dragStartIndex: WritableSignal<number>;
847
+ dragToIndex: WritableSignal<number>;
848
+ initialPositions: WritableSignal<{
849
+ x: number;
850
+ y: number;
851
+ width: number;
852
+ height: number;
853
+ }[]>;
854
+ dragables: WritableSignal<HTMLElement[]>;
855
+ static activeSource: ShipSortable | null;
856
+ static activeDraggedElement: HTMLElement | null;
857
+ static activeTarget: ShipSortable | null;
831
858
  abortController: AbortController | null;
832
859
  isDropping: boolean;
860
+ isCrossTarget: boolean;
833
861
  draggingEffect: _angular_core.EffectRef;
834
862
  draggablesEffect: _angular_core.EffectRef;
835
863
  getIndexOfElement(element: HTMLElement): number;
836
864
  dragStart(e: DragEvent): void;
837
865
  ngOnInit(): void;
866
+ dragEnter(e: DragEvent): void;
867
+ dragLeave(e: DragEvent): void;
838
868
  dragOver(e: DragEvent): void;
869
+ getVisualIndexOfElement(i: number): number;
839
870
  drop(): void;
840
871
  dragEnd(): void;
841
872
  ngOnDestroy(): void;
842
873
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShipSortable, never>;
843
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ShipSortable, "[shSortable]", never, {}, { "afterDrop": "afterDrop"; }, never, never, true, never>;
874
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ShipSortable, "[shSortable]", never, { "shSortable": { "alias": "shSortable"; "required": false; "isSignal": true; }; "sortableGroup": { "alias": "sortableGroup"; "required": false; "isSignal": true; }; }, { "sortDrop": "sortDrop"; "afterDrop": "afterDrop"; "crossDrop": "crossDrop"; }, never, never, true, never>;
844
875
  }
845
- declare function moveIndex<T = any>(array: T[], event: AfterDropResponse): T[];
876
+ declare function moveIndex<T = any>(array: T[], event: Pick<ShipDropEvent, 'previousIndex' | 'currentIndex'> | Pick<AfterDropResponse, 'fromIndex' | 'toIndex'>): T[];
877
+ declare function transferArrayItem<T = any>(currentArray: T[], targetArray: T[], currentIndex: number, targetIndex: number): void;
846
878
 
847
879
  declare class ShipSpinner {
848
880
  color: _angular_core.InputSignal<ShipColor | null>;
@@ -1063,6 +1095,32 @@ declare class ShipTooltip implements OnDestroy {
1063
1095
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ShipTooltip, "[shTooltip]", never, { "shTooltip": { "alias": "shTooltip"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1064
1096
  }
1065
1097
 
1098
+ declare function hslToRgbExact(h: number, s: number, l: number): [number, number, number];
1099
+ declare function hsvToRgbExact(h: number, s: number, v: number): [number, number, number];
1100
+ declare function rgbToHsv(r: number, g: number, b: number): {
1101
+ h: number;
1102
+ s: number;
1103
+ v: number;
1104
+ };
1105
+ declare function rgbToHex(r: number, g: number, b: number): string;
1106
+ declare function rgbaToHex8(r: number, g: number, b: number, a: number): string;
1107
+ declare function rgbToHsl(r: number, g: number, b: number): {
1108
+ h: number;
1109
+ s: number;
1110
+ l: number;
1111
+ string: string;
1112
+ };
1113
+ declare function rgbToOklch(r: number, g: number, b: number): {
1114
+ l: number;
1115
+ c: number;
1116
+ h: number;
1117
+ };
1118
+ declare function hslToOklch(h: number, s: number, l: number): {
1119
+ l: number;
1120
+ c: number;
1121
+ h: number;
1122
+ };
1123
+
1066
1124
  declare const defaultThemeColors: Record<string, string>;
1067
1125
  declare const SHIP_CONFIG: InjectionToken<ShipConfig>;
1068
1126
  interface ShipComponentConfig {
@@ -1127,31 +1185,5 @@ interface ShipConfig {
1127
1185
  sidenavType?: 'overlay' | 'simple';
1128
1186
  }
1129
1187
 
1130
- declare function hslToRgbExact(h: number, s: number, l: number): [number, number, number];
1131
- declare function hsvToRgbExact(h: number, s: number, v: number): [number, number, number];
1132
- declare function rgbToHsv(r: number, g: number, b: number): {
1133
- h: number;
1134
- s: number;
1135
- v: number;
1136
- };
1137
- declare function rgbToHex(r: number, g: number, b: number): string;
1138
- declare function rgbaToHex8(r: number, g: number, b: number, a: number): string;
1139
- declare function rgbToHsl(r: number, g: number, b: number): {
1140
- h: number;
1141
- s: number;
1142
- l: number;
1143
- string: string;
1144
- };
1145
- declare function rgbToOklch(r: number, g: number, b: number): {
1146
- l: number;
1147
- c: number;
1148
- h: number;
1149
- };
1150
- declare function hslToOklch(h: number, s: number, l: number): {
1151
- l: number;
1152
- c: number;
1153
- h: number;
1154
- };
1155
-
1156
- export { GridSortable, SHIP_CONFIG, ShipAccordion, ShipAlert, ShipAlertContainer, ShipAlertModule, ShipAlertService, ShipBlueprint, ShipButton, ShipButtonGroup, ShipCard, ShipCheckbox, ShipChip, ShipColorPicker, ShipColorPickerInput, ShipDatepicker, ShipDatepickerInput, ShipDaterangeInput, ShipDialog, ShipDialogService, ShipDivider, ShipEventCard, ShipFileDragDrop, ShipFileUpload, ShipFormField, ShipFormFieldExperimental, ShipIcon, ShipInputMask, ShipList, ShipMenu, ShipPopover, ShipPreventWheel, ShipProgressBar, ShipRadio, ShipRangeSlider, ShipResize, ShipSelect, ShipSidenav, ShipSort, ShipSortable, ShipSpinner, ShipStepper, ShipStickyColumns, ShipTable, ShipTabs, ShipThemeToggle, ShipToggle, ShipToggleCard, ShipTooltip, ShipTooltipWrapper, ShipVirtualScroll, TEST_NODES, defaultThemeColors, hslToOklch, hslToRgbExact, hsvToRgbExact, moveIndex, rgbToHex, rgbToHsl, rgbToHsv, rgbToOklch, rgbaToHex8, watchHostClass };
1157
- export type { AfterDropResponse, BlueprintNode, ComponentClosedType, ComponentDataType, Coordinates, Exact, ShipAlertItem, ShipAlertItemInternal, ShipAlertType, ShipButtonGroupVariant, ShipButtonSize, ShipCardVariant, ShipChipConfig, ShipColor, ShipComponentConfig, ShipConfig, ShipConfigColors, ShipConfigDistributions, ShipDialogInstance, ShipDialogOptions, ShipDialogServiceOptions, ShipDialogTemplateInstance, ShipFormFieldVariant, ShipIconSize, ShipPopoverOptions, ShipProgressBarMode, ShipRangeSliderConfig, ShipSheetVariant, ShipSidenavType, ShipSize, ShipTableVariant, ShipTypeVariant, ShipVariant };
1188
+ export { SHIP_CONFIG, ShipAccordion, ShipAlert, ShipAlertContainer, ShipAlertModule, ShipAlertService, ShipBlueprint, ShipButton, ShipButtonGroup, ShipCard, ShipCheckbox, ShipChip, ShipColorPicker, ShipColorPickerInput, ShipDatepicker, ShipDatepickerInput, ShipDaterangeInput, ShipDialog, ShipDialogService, ShipDivider, ShipEventCard, ShipFileDragDrop, ShipFileUpload, ShipFormField, ShipFormFieldExperimental, ShipIcon, ShipInputMask, ShipList, ShipMenu, ShipPopover, ShipPreventWheel, ShipProgressBar, ShipRadio, ShipRangeSlider, ShipResize, ShipSelect, ShipSidenav, ShipSort, ShipSortable, ShipSpinner, ShipStepper, ShipStickyColumns, ShipTable, ShipTabs, ShipThemeToggle, ShipToggle, ShipToggleCard, ShipTooltip, ShipTooltipWrapper, ShipVirtualScroll, TEST_NODES, createSortableManager, defaultThemeColors, hslToOklch, hslToRgbExact, hsvToRgbExact, moveIndex, rgbToHex, rgbToHsl, rgbToHsv, rgbToOklch, rgbaToHex8, transferArrayItem, watchHostClass };
1189
+ export type { AfterDropResponse, BlueprintNode, ComponentClosedType, ComponentDataType, Coordinates, CrossDropResponse, Exact, ShipAlertItem, ShipAlertItemInternal, ShipAlertType, ShipButtonGroupVariant, ShipButtonSize, ShipCardVariant, ShipChipConfig, ShipColor, ShipComponentConfig, ShipConfig, ShipConfigColors, ShipConfigDistributions, ShipDialogInstance, ShipDialogOptions, ShipDialogServiceOptions, ShipDialogTemplateInstance, ShipDropEvent, ShipFormFieldVariant, ShipIconSize, ShipPopoverOptions, ShipProgressBarMode, ShipRangeSliderConfig, ShipSheetVariant, ShipSidenavType, ShipSize, ShipTableVariant, ShipTypeVariant, ShipVariant, SortableManagerConfig };
package/bin/ship-fg-node DELETED
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { parseArgs } from 'util';
4
- import { main } from './src/ship-fg-node.js'; // Added .js extension for ESM imports
5
-
6
- const { values } = parseArgs({
7
- args: process.argv, // Changed from Bun.argv to process.argv
8
- options: {
9
- src: {
10
- type: 'string',
11
- },
12
- out: {
13
- type: 'string',
14
- },
15
- rootPath: {
16
- type: 'string',
17
- default: '/',
18
- },
19
- watch: {
20
- type: 'boolean',
21
- default: false,
22
- },
23
- watchLib: {
24
- type: 'boolean',
25
- default: false,
26
- },
27
- verbose: {
28
- type: 'boolean',
29
- default: false,
30
- },
31
- },
32
- allowPositionals: true,
33
- strict: true,
34
- });
35
-
36
- if (values.src === undefined || values.out === undefined) {
37
- throw new Error('src and out are both required arguments');
38
- }
39
-
40
- main(values);