@flux-ui/components 3.0.0-next.52 → 3.0.0-next.54

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.
@@ -44,10 +44,10 @@ declare const _default: DefineComponent<ExtractPropTypes<{
44
44
  type: NumberConstructor;
45
45
  };
46
46
  }>> & Readonly<{}>, {
47
+ offset: number;
47
48
  duration: number;
48
49
  width: number;
49
50
  colors: string[];
50
- offset: number;
51
51
  radius: string | number;
52
52
  }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
53
53
  export default _default;
@@ -0,0 +1,25 @@
1
+ import { FluxKanbanMoveEvent } from '@flux-ui/types';
2
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
3
+ declare function __VLS_template(): {
4
+ attrs: Partial<{}>;
5
+ slots: Readonly<{
6
+ default?(): any;
7
+ }> & {
8
+ default?(): any;
9
+ };
10
+ refs: {};
11
+ rootEl: HTMLDivElement;
12
+ };
13
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
14
+ declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
15
+ move: (args_0: FluxKanbanMoveEvent) => any;
16
+ }, string, PublicProps, Readonly<{}> & Readonly<{
17
+ onMove?: (args_0: FluxKanbanMoveEvent) => any;
18
+ }>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
19
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
20
+ export default _default;
21
+ type __VLS_WithTemplateSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -0,0 +1,28 @@
1
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
+ type __VLS_Props = {
3
+ readonly cardId: string | number;
4
+ readonly columnId: string | number;
5
+ };
6
+ declare function __VLS_template(): {
7
+ attrs: Partial<{}>;
8
+ slots: Readonly<{
9
+ default?(): any;
10
+ }> & {
11
+ default?(): any;
12
+ };
13
+ refs: {
14
+ root: HTMLDivElement;
15
+ };
16
+ rootEl: HTMLDivElement;
17
+ };
18
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
19
+ declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
20
+ root: HTMLDivElement;
21
+ }, HTMLDivElement>;
22
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
23
+ export default _default;
24
+ type __VLS_WithTemplateSlots<T, S> = T & {
25
+ new (): {
26
+ $slots: S;
27
+ };
28
+ };
@@ -0,0 +1,28 @@
1
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
+ type __VLS_Props = {
3
+ readonly columnId: string | number;
4
+ readonly label: string;
5
+ };
6
+ declare function __VLS_template(): {
7
+ attrs: Partial<{}>;
8
+ slots: Readonly<{
9
+ default?(): any;
10
+ header?(): any;
11
+ actions?(): any;
12
+ }> & {
13
+ default?(): any;
14
+ header?(): any;
15
+ actions?(): any;
16
+ };
17
+ refs: {};
18
+ rootEl: HTMLDivElement;
19
+ };
20
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
21
+ declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
22
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
23
+ export default _default;
24
+ type __VLS_WithTemplateSlots<T, S> = T & {
25
+ new (): {
26
+ $slots: S;
27
+ };
28
+ };
@@ -80,6 +80,9 @@ export { default as FluxGridColumn } from './FluxGridColumn.vue';
80
80
  export { default as FluxGridPattern } from './FluxGridPattern.vue';
81
81
  export { default as FluxIcon } from './FluxIcon.vue';
82
82
  export { default as FluxInfo } from './FluxInfo.vue';
83
+ export { default as FluxKanban } from './FluxKanban.vue';
84
+ export { default as FluxKanbanCard } from './FluxKanbanCard.vue';
85
+ export { default as FluxKanbanColumn } from './FluxKanbanColumn.vue';
83
86
  export { default as FluxInfoStack } from './FluxInfoStack.vue';
84
87
  export { default as FluxItem } from './FluxItem.vue';
85
88
  export { default as FluxItemActions } from './FluxItemActions.vue';
@@ -11,10 +11,10 @@ type __VLS_PublicProps = {
11
11
  'searchQuery'?: string;
12
12
  } & __VLS_Props;
13
13
  declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
14
- select: (args_0: any) => any;
14
+ select: (args_0: FluxFilterValueSingle) => any;
15
15
  "update:searchQuery": (value: string) => any;
16
16
  }, string, PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
17
- onSelect?: (args_0: any) => any;
17
+ onSelect?: (args_0: FluxFilterValueSingle) => any;
18
18
  "onUpdate:searchQuery"?: (value: string) => any;
19
19
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
20
20
  export default _default;
@@ -1,4 +1,4 @@
1
- import { FluxFormSelectOption, FluxFormSelectOptions, FluxDirection, FluxFormInputBaseProps, FluxAutoCompleteType, FluxIconName, FluxInputMask, FluxInputType, FluxTo, FluxPressableType, FluxButtonProps } from '@flux-ui/types';
1
+ import { FluxFormSelectOption, FluxFormSelectOptions, FluxDirection, FluxFormInputBaseProps, FluxAutoCompleteType, FluxIconName, FluxInputMask, FluxInputType, FluxPressableType, FluxTo, FluxButtonProps } from '@flux-ui/types';
2
2
  import { ComponentPublicInstance, nextTick, DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions, ComponentInternalInstance, VNodeProps, AllowedComponentProps, ComponentCustomProps, Attrs, Slot, ComponentOptionsBase, GlobalComponents, GlobalDirectives, DebuggerEvent, WatchOptions, WatchStopHandle, ComponentCustomProperties, VNode, CreateComponentPublicInstanceWithMixins } from 'vue';
3
3
  import { OnCleanup } from '@vue/reactivity';
4
4
  type __VLS_Props = {
@@ -203,10 +203,10 @@ declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Compo
203
203
  $props: Partial<{}> & Omit<{
204
204
  readonly label?: string;
205
205
  readonly isLoading?: boolean;
206
+ readonly type?: FluxPressableType;
206
207
  readonly disabled?: boolean;
207
208
  readonly to?: FluxTo;
208
209
  readonly tabindex?: string | number;
209
- readonly type?: FluxPressableType;
210
210
  readonly href?: string;
211
211
  readonly rel?: string;
212
212
  readonly target?: string;
@@ -0,0 +1,7 @@
1
+ import { FluxKanbanMoveEvent } from '@flux-ui/types';
2
+ import { FluxKanbanInjection } from '../../data/di';
3
+ /**
4
+ * Internal composable for managing kanban drag-and-drop state.
5
+ * Provides card registration, drag tracking, and drop target management.
6
+ */
7
+ export declare function useKanban(onMove: (event: FluxKanbanMoveEvent) => void): FluxKanbanInjection;
package/dist/data/di.d.ts CHANGED
@@ -2,12 +2,32 @@ import { FluxFilterState, FluxFilterValue } from '@flux-ui/types';
2
2
  import { ComponentInternalInstance, InjectionKey, Ref } from 'vue';
3
3
  export declare const FluxAdaptiveGroupInjectionKey: InjectionKey<FluxAdaptiveGroupInjection>;
4
4
  export declare const FluxDisabledInjectionKey: InjectionKey<Ref<boolean>>;
5
+ export declare const FluxKanbanInjectionKey: InjectionKey<FluxKanbanInjection>;
5
6
  export declare const FluxExpandableGroupInjectionKey: InjectionKey<FluxExpandableGroupInjection>;
6
7
  export declare const FluxFlyoutInjectionKey: InjectionKey<FluxFlyoutInjection>;
7
8
  export declare const FluxFilterInjectionKey: InjectionKey<FluxFilterInjection>;
8
9
  export declare const FluxFormFieldInjectionKey: InjectionKey<FluxFormFieldInjection>;
9
10
  export declare const FluxTableInjectionKey: InjectionKey<FluxTableInjection>;
10
11
  export declare const FluxTooltipInjectionKey: InjectionKey<FluxTooltipInjection>;
12
+ export type FluxKanbanDragState = {
13
+ readonly cardId: string | number;
14
+ readonly fromColumnId: string | number;
15
+ readonly dropColumnId: string | number | null;
16
+ readonly beforeCardId: string | number | null;
17
+ };
18
+ export type FluxKanbanInjection = {
19
+ readonly dragState: Ref<FluxKanbanDragState | null>;
20
+ registerCard(element: Element, cardId: string | number): void;
21
+ unregisterCard(element: Element): void;
22
+ getCardInfo(element: Element): {
23
+ readonly cardId: string | number;
24
+ } | undefined;
25
+ startDrag(cardId: string | number, fromColumnId: string | number): void;
26
+ endDrag(): void;
27
+ updateDropTarget(columnId: string | number, beforeCardId: string | number | null): void;
28
+ clearDropTarget(): void;
29
+ commitDrop(): void;
30
+ };
11
31
  export type FluxAdaptiveGroupChild = {
12
32
  readonly priority: Ref<number>;
13
33
  readonly desiredDefaultWidth: Ref<number>;
package/dist/index.css CHANGED
@@ -5242,6 +5242,90 @@ tfoot .table-cell {
5242
5242
 
5243
5243
  .info-body {
5244
5244
  align-items: center;
5245
+ }.kanban {
5246
+ display: flex;
5247
+ flex-flow: row;
5248
+ gap: 15px;
5249
+ overflow-x: auto;
5250
+ padding-bottom: 6px;
5251
+ }.kanban-card {
5252
+ position: relative;
5253
+ padding: 12px;
5254
+ background: var(--gray-25);
5255
+ border: 1px solid var(--gray-200);
5256
+ border-radius: var(--radius);
5257
+ cursor: grab;
5258
+ transition: opacity 180ms var(--swift-out), box-shadow 180ms var(--swift-out);
5259
+ user-select: none;
5260
+ }
5261
+ .kanban-card:active {
5262
+ cursor: grabbing;
5263
+ }
5264
+ .kanban-card:hover {
5265
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
5266
+ }
5267
+
5268
+ .is-dragging {
5269
+ opacity: 0.4;
5270
+ cursor: grabbing;
5271
+ }
5272
+
5273
+ .is-drop-before::before {
5274
+ content: "";
5275
+ position: absolute;
5276
+ inset-inline: 0;
5277
+ top: -6px;
5278
+ height: 2px;
5279
+ border-radius: 999px;
5280
+ background: var(--primary-500);
5281
+ }.kanban-column {
5282
+ display: flex;
5283
+ flex-flow: column;
5284
+ flex-shrink: 0;
5285
+ width: 280px;
5286
+ background: var(--gray-100);
5287
+ border: 1px solid var(--gray-200);
5288
+ border-radius: var(--radius);
5289
+ overflow: hidden;
5290
+ }
5291
+
5292
+ .kanban-column-header {
5293
+ display: flex;
5294
+ align-items: center;
5295
+ gap: 9px;
5296
+ padding: 12px 15px;
5297
+ border-bottom: 1px solid var(--gray-200);
5298
+ }
5299
+
5300
+ .kanban-column-label {
5301
+ flex: 1;
5302
+ font-size: 0.8125rem;
5303
+ font-weight: 600;
5304
+ color: var(--foreground);
5305
+ letter-spacing: 0.01em;
5306
+ text-transform: uppercase;
5307
+ }
5308
+
5309
+ .kanban-column-body {
5310
+ display: flex;
5311
+ flex-flow: column;
5312
+ gap: 9px;
5313
+ padding: 9px;
5314
+ min-height: 60px;
5315
+ flex: 1;
5316
+ overflow-y: auto;
5317
+ transition: background 180ms var(--swift-out);
5318
+ }
5319
+
5320
+ .is-over .kanban-column-body {
5321
+ background: rgb(from var(--primary-500) r g b/0.06);
5322
+ }
5323
+
5324
+ .kanban-drop-indicator {
5325
+ height: 2px;
5326
+ border-radius: 999px;
5327
+ background: var(--primary-500);
5328
+ flex-shrink: 0;
5245
5329
  }.item {
5246
5330
  display: flex;
5247
5331
  flex-flow: row nowrap;