@septkit/ui 0.0.53 → 0.0.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.
Files changed (19) hide show
  1. package/dist/dialecte/composables/index.js +2 -1
  2. package/dist/dialecte/composables/use-document-state.js +69 -0
  3. package/dist/dialecte/create-document-store.js +3 -3
  4. package/dist/dialecte/index.js +2 -1
  5. package/dist/external/.pnpm/{@dialecte_core@0.4.11 → @dialecte_core@0.4.12}/node_modules/@dialecte/core/dist/helpers.js +1 -1
  6. package/dist/external/.pnpm/{@dialecte_core@0.4.11 → @dialecte_core@0.4.12}/node_modules/@dialecte/core/dist/index.js +1 -1
  7. package/dist/external/.pnpm/{@dialecte_core@0.4.11/node_modules/@dialecte/core/dist/project-BjO7cVmO.js → @dialecte_core@0.4.12/node_modules/@dialecte/core/dist/project-DkMkDgld.js} +845 -763
  8. package/dist/external/.pnpm/{@dialecte_core@0.4.11 → @dialecte_core@0.4.12}/node_modules/@dialecte/core/dist/utils-C5_11hqg.js +1 -1
  9. package/dist/external/.pnpm/{@dialecte_scl@0.3.13/node_modules/@dialecte/scl/dist/hooks-D5DJSztS.js → @dialecte_scl@0.3.14/node_modules/@dialecte/scl/dist/hooks-By65uB-0.js} +2 -2
  10. package/dist/external/.pnpm/{@dialecte_scl@0.3.13 → @dialecte_scl@0.3.14}/node_modules/@dialecte/scl/dist/v2019C1/index.js +3 -3
  11. package/dist/index.d.ts +71 -0
  12. package/dist/index.js +26 -23
  13. package/dist/merge/merge-preflight.vue_vue_type_script_setup_true_lang.js +1 -1
  14. package/dist/merge/merge.service.js +2 -2
  15. package/dist/progress/document-progress-bar.js +5 -0
  16. package/dist/progress/document-progress-bar.vue_vue_type_script_setup_true_lang.js +25 -0
  17. package/dist/progress/index.js +2 -0
  18. package/dist/ui.css +1 -1
  19. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- //#region node_modules/.pnpm/@dialecte+core@0.4.11/node_modules/@dialecte/core/dist/utils-C5_11hqg.js
1
+ //#region node_modules/.pnpm/@dialecte+core@0.4.12/node_modules/@dialecte/core/dist/utils-C5_11hqg.js
2
2
  var e = {
3
3
  UNKNOWN: {
4
4
  code: "D0001",
@@ -1,5 +1,5 @@
1
- import { XSI_NAMESPACE as e } from "../../../../../@dialecte_core@0.4.11/node_modules/@dialecte/core/dist/helpers.js";
2
- //#region node_modules/.pnpm/@dialecte+scl@0.3.13/node_modules/@dialecte/scl/dist/hooks-D5DJSztS.js
1
+ import { XSI_NAMESPACE as e } from "../../../../../@dialecte_core@0.4.12/node_modules/@dialecte/core/dist/helpers.js";
2
+ //#region node_modules/.pnpm/@dialecte+scl@0.3.14/node_modules/@dialecte/scl/dist/hooks-By65uB-0.js
3
3
  var t = /* @__PURE__ */ "AccessControl.AccessPoint.Address.AllocationRole.AllocationRoleRef.AnalogueWiringParameters.AnalogueWiringParametersRef.Application.ApplicationSclRef.Association.Authentication.BDA.Bay.BayType.BehaviorDescription.BehaviorDescriptionRef.BehaviorReference.BinaryWiringParameters.BinaryWiringParametersRef.BitRate.CheckoutID.ClientLN.ClientServices.CommProt.Communication.CommunicationServiceSpecifications.ConductingEquipment.ConfDataSet.ConfLNs.ConfLdName.ConfLogControl.ConfReportControl.ConfSG.ConfSigRef.ConnectedAP.ConnectivityNode.ControlRef.ControllingLNode.DA.DAI.DAS.DAType.DO.DOI.DOS.DOType.DataObjectDirectory.DataSet.DataSetDirectory.DataTypeTemplates.DynAssociation.DynDataSet.EnumType.EnumVal.EqFunction.EqSubFunction.ExtCtrl.ExtRef.FCDA.FileHandling.Function.FunctionCatRef.FunctionCategory.FunctionCategoryRef.FunctionRef.FunctionRole.FunctionRoleContent.FunctionSclRef.FunctionTemplate.FunctionalSubVariant.FunctionalVariant.FunctionalVariantGroup.FunctionalVariantRef.GOOSE.GOOSEMcSecurity.GOOSESecurity.GSE.GSEControl.GSEDir.GSESettings.GSSE.GeneralEquipment.GetCBValues.GetDataObjectDefinition.GetDataSetValue.GetDirectory.GooseParameters.GooseParametersRef.Header.History.Hitem.IED.IEDName.IEDSourceFiles.InputVar.InputVarRef.Inputs.IssuerName.KDC.L2CommParameters.L3IPv4CommParameters.L3IPv6CommParameters.LDevice.LN.LN0.LNode.LNodeDataRef.LNodeInputRef.LNodeInputs.LNodeOutputRef.LNodeOutputs.LNodeSpecNaming.LNodeType.Label.Labels.Line.Log.LogControl.LogParameters.LogParametersRef.LogSettings.MaxTime.McSecurity.MinRequestedSCDFile.MinRequestedSCDFiles.MinTime.MultiAPPerSubNet.NeutralPoint.OptFields.OutputVar.OutputVarRef.Outputs.P.PhysConn.PowerSystemRelation.PowerSystemRelationRef.PowerSystemRelations.PowerTransformer.Private.Process.ProcessEcho.ProcessResource.ProcessResourceRef.ProcessResources.Project.ProjectProcessReference.ProtNs.Protocol.ReadWrite.RedProt.ReportControl.ReportParameters.ReportParametersRef.ReportSettings.Resource.RptEnabled.SCL.SCSM.SDI.SDO.SDS.SGEdit.SMV.SMVParameters.SMVParametersRef.SMVSecurity.SMVSettings.SMVsc.SVMcSecurity.SampledValueControl.SamplesPerSec.SclFileReference.SecPerSamples.Security.Server.ServerAt.ServiceSpecifications.Services.SetDataSetValue.SettingControl.SettingGroups.SignalRole.SmpRate.SmvOpts.SourceFiles.SourceRef.SubCategory.SubCheckoutID.SubEquipment.SubFunction.SubFunctionTemplate.SubNetwork.Subject.SubscriberLNode.Substation.SupSubscription.TapChanger.Terminal.Text.TimeSyncProt.TimerActivatedControl.TransformerWinding.TrgOps.Val.ValueHandling.Variable.VariableApplyTo.VariableRef.Voltage.VoltageLevel".split("."), n = {
4
4
  AccessControl: {
5
5
  tag: "AccessControl",
@@ -1,6 +1,6 @@
1
- import "../../../../../../@dialecte_core@0.4.11/node_modules/@dialecte/core/dist/index.js";
2
- import { i as e } from "../hooks-D5DJSztS.js";
3
- //#region node_modules/.pnpm/@dialecte+scl@0.3.13/node_modules/@dialecte/scl/dist/v2019C1/index.js
1
+ import "../../../../../../@dialecte_core@0.4.12/node_modules/@dialecte/core/dist/index.js";
2
+ import { i as e } from "../hooks-By65uB-0.js";
3
+ //#region node_modules/.pnpm/@dialecte+scl@0.3.14/node_modules/@dialecte/scl/dist/v2019C1/index.js
4
4
  var t = {
5
5
  "cross-type-template-uuid": {
6
6
  title: "Placeholder templateUuid reused across element types",
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ import { ComputedRef } from 'vue';
7
7
  import { DefineComponent } from 'vue';
8
8
  import { DiffNode } from '@dialecte/scl/v2019C1';
9
9
  import { DiffReport } from '@dialecte/scl/v2019C1';
10
+ import { DocumentState } from '@dialecte/core';
10
11
  import { ExtensionModule } from '@dialecte/core';
11
12
  import { GroupDecision } from '@dialecte/scl/v2019C1';
12
13
  import { InjectionKey } from 'vue';
@@ -555,6 +556,23 @@ export declare type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'fit';
555
556
  */
556
557
  export declare function diffLines(before: string, after: string): UnifiedDiff;
557
558
 
559
+ export declare const DocumentProgressBar: DefineComponent<DocumentProgressBarProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<DocumentProgressBarProps> & Readonly<{}>, {
560
+ fallbackLabel: string;
561
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
562
+
563
+ /** Props for {@link DocumentProgressBar}. */
564
+ export declare type DocumentProgressBarProps = {
565
+ /** Document to observe; the bar renders only while an operation is running (`loading`). */
566
+ document: ReactiveDocument | undefined;
567
+ /**
568
+ * Force visibility past the document's own `loading` — for an operation whose post-commit
569
+ * work outlives the transaction. When omitted, the bar follows the document's `loading`.
570
+ */
571
+ active?: boolean;
572
+ /** Caption shown while the document reports no label of its own. */
573
+ fallbackLabel?: string;
574
+ };
575
+
558
576
  export declare const Dropdown: __VLS_WithTemplateSlots_2<typeof __VLS_component_2, __VLS_TemplateResult_2["slots"]>;
559
577
 
560
578
  /** How the UI may edit an attribute (schema-derived classifier). */
@@ -746,6 +764,12 @@ color: "neutral" | "primary" | "secondary" | "accent" | "info" | "success" | "wa
746
764
  size: "xs" | "sm" | "md" | "lg" | "xl";
747
765
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
748
766
 
767
+ /** Presentation progress: a held monotonic fraction in `[0, 1]` and its caption. */
768
+ export declare type ProgressDisplay = {
769
+ fraction: number;
770
+ label: string;
771
+ };
772
+
749
773
  /** The props a component accepts (declared props + Vue built-ins like `onXxx` listeners). */
750
774
  declare type PropsOf<C extends Component> = C extends new (...args: never[]) => {
751
775
  $props: infer P;
@@ -754,6 +778,16 @@ declare type PropsOf<C extends Component> = C extends new (...args: never[]) =>
754
778
  /** Create (or adopt) a dialog host and provide it to descendants. Call once at the root. */
755
779
  export declare function provideDialogHost(host?: DialogController): DialogController;
756
780
 
781
+ /**
782
+ * Minimal slice of a `Document` consumed by `useDocumentState`: its live `state`
783
+ * plus `subscribe` (the in-realm reactive signal). Structural so the composable
784
+ * stays decoupled; real core Documents satisfy it as-is.
785
+ */
786
+ export declare type ReactiveDocument = {
787
+ readonly state: DocumentState;
788
+ subscribe(callback: (terminal: boolean) => void): () => void;
789
+ };
790
+
757
791
  export declare const SclExplorer: __VLS_WithTemplateSlots_5<typeof __VLS_component_5, __VLS_TemplateResult_5["slots"]>;
758
792
 
759
793
  /** Per-node selection payload: what to preview and (if any) the change it carries. */
@@ -843,6 +877,43 @@ export declare function useDialecteChannel(channelName: MaybeRefOrGetter<string
843
877
  /** Inject the ambient dialog host. Throws if no host was provided. */
844
878
  export declare function useDialog(): DialogController;
845
879
 
880
+ /**
881
+ * Presentation-friendly progress for a document, in ONE call: a monotonic fraction
882
+ * in `[0, 1]` plus its caption, both **held** across the end of an operation.
883
+ *
884
+ * `raw = (current + step.current/step.total) / total`, clamped to a running max so
885
+ * a later fine phase resetting `step` within the same coarse slot never makes the
886
+ * bar jump backward. When the operation finishes and core nulls `progress`, the
887
+ * last fraction and caption are **held** (not reset to `0` / `''`) — so a consumer
888
+ * whose own "done" state lags the core clear by a frame (e.g. a dialog that swaps
889
+ * the bar for a success message) never flashes an empty `0%` bar. Floor + caption
890
+ * reset only on the rising edge of the NEXT operation (`null` → non-null). Idle
891
+ * before any operation is `{ 0, '' }`. Presentation-only — core state stays truthful.
892
+ *
893
+ * Takes a document (or a `MaybeRefOrGetter` of one that may be `undefined`) and
894
+ * composes {@link useDocumentState} internally, so a progress-bar consumer needs a
895
+ * single composable. Backed by an eager `watch` (not a lazy `computed`) so every
896
+ * operation boundary — including the intermediate `null` frame — is observed even
897
+ * while the value isn't read (bar hidden between operations).
898
+ */
899
+ export declare function useDocumentProgress(doc: MaybeRefOrGetter<ReactiveDocument | undefined>): Readonly<Ref<ProgressDisplay>>;
900
+
901
+ /**
902
+ * Reactive snapshot of a dialecte document's plain `state`, driven by
903
+ * `doc.subscribe`. Core emits every change; throttling lives here:
904
+ * non-terminal frames (progress steps, `loading` toggles) are coalesced into a
905
+ * single flush per animation frame, while terminal frames (an operation's last
906
+ * frame) flush synchronously so the final 100%/cleared state is never dropped —
907
+ * even in a hidden tab where rAF is paused. A stale coalesced frame that would
908
+ * land after a terminal flush is skipped, so it cannot resurrect a mid-operation
909
+ * state over the settled one.
910
+ *
911
+ * Accepts a document, or a ref/getter of one that may be `undefined` (mirrors
912
+ * `useLiveData`): it re-subscribes when the document changes and holds an empty
913
+ * state while there is none.
914
+ */
915
+ export declare function useDocumentState(doc: MaybeRefOrGetter<ReactiveDocument | undefined>): Readonly<Ref<DocumentState>>;
916
+
846
917
  /**
847
918
  * Async data that refetches when its document changes.
848
919
  *
package/dist/index.js CHANGED
@@ -2,32 +2,35 @@ import { createDocumentStore as e } from "./dialecte/create-document-store.js";
2
2
  import { useDialecteChannel as t } from "./dialecte/composables/use-dialecte-channel.js";
3
3
  import { useLiveData as n, useProjectLiveData as r } from "./dialecte/composables/use-live-data.js";
4
4
  import { useActiveDocument as i } from "./dialecte/composables/use-active-document.js";
5
+ import { useDocumentProgress as a, useDocumentState as o } from "./dialecte/composables/use-document-state.js";
5
6
  import "./dialecte/index.js";
6
- import a from "./button/button.js";
7
- import o from "./dropdown/dropdown.js";
8
- import s from "./dropdown/combobox.js";
9
- import c from "./dropdown/multi-select.js";
7
+ import s from "./button/button.js";
8
+ import c from "./dropdown/dropdown.js";
9
+ import l from "./dropdown/combobox.js";
10
+ import u from "./dropdown/multi-select.js";
10
11
  import "./dropdown/index.js";
11
- import l from "./dialog/dialog.js";
12
- import u from "./dialog/feedback-dialog.js";
13
- import { createDialogHost as d, dialogHostKey as f, provideDialogHost as p, useDialog as m } from "./dialog/use-dialog-host.js";
14
- import h from "./dialog/dialog-host.js";
12
+ import d from "./dialog/dialog.js";
13
+ import f from "./dialog/feedback-dialog.js";
14
+ import { createDialogHost as p, dialogHostKey as m, provideDialogHost as h, useDialog as g } from "./dialog/use-dialog-host.js";
15
+ import _ from "./dialog/dialog-host.js";
15
16
  import "./dialog/index.js";
16
- import { CATEGORY_ELEMENTS as g, ELEMENT_TO_COLOR as _ } from "./icons/element-color-map.generated.js";
17
- import { ELEMENT_TO_ICON as v } from "./icons/element-icon-mapper.js";
18
- import { collectExpandableNodeIds as y } from "./explorer/collect-expandable-node-ids.js";
19
- import b from "./explorer/explorer.js";
17
+ import v from "./progress/document-progress-bar.js";
18
+ import "./progress/index.js";
19
+ import { CATEGORY_ELEMENTS as y, ELEMENT_TO_COLOR as b } from "./icons/element-color-map.generated.js";
20
+ import { ELEMENT_TO_ICON as x } from "./icons/element-icon-mapper.js";
21
+ import { collectExpandableNodeIds as S } from "./explorer/collect-expandable-node-ids.js";
22
+ import C from "./explorer/explorer.js";
20
23
  import "./explorer/index.js";
21
- import { highlightCode as x } from "./code/highlight.js";
22
- import S from "./code/code-block.js";
23
- import { diffLines as C } from "./code/diff.js";
24
- import w from "./code/xml-diff.js";
24
+ import { highlightCode as w } from "./code/highlight.js";
25
+ import T from "./code/code-block.js";
26
+ import { diffLines as E } from "./code/diff.js";
27
+ import D from "./code/xml-diff.js";
25
28
  import "./code/index.js";
26
- import T from "./merge/decision-toggle.js";
27
- import E from "./merge/element-detail.js";
28
- import D from "./merge/merge-tree.js";
29
- import O from "./merge/type-name-authority.js";
30
- import { useMergeSession as k } from "./merge/use-merge-session.js";
31
- import A from "./merge/merge-review.js";
29
+ import O from "./merge/decision-toggle.js";
30
+ import k from "./merge/element-detail.js";
31
+ import A from "./merge/merge-tree.js";
32
+ import j from "./merge/type-name-authority.js";
33
+ import { useMergeSession as M } from "./merge/use-merge-session.js";
34
+ import N from "./merge/merge-review.js";
32
35
  import "./merge/index.js";
33
- export { a as Button, g as CATEGORY_ELEMENTS, S as CodeBlock, s as Combobox, T as DecisionToggle, l as Dialog, h as DialogHost, o as Dropdown, _ as ELEMENT_TO_COLOR, v as ELEMENT_TO_ICON, E as ElementDetail, u as FeedbackDialog, A as MergeReview, D as MergeTree, c as MultiSelect, b as SclExplorer, O as TypeNameAuthority, w as XmlDiff, y as collectExpandableNodeIds, d as createDialogHost, e as createDocumentStore, f as dialogHostKey, C as diffLines, x as highlightCode, p as provideDialogHost, i as useActiveDocument, t as useDialecteChannel, m as useDialog, n as useLiveData, k as useMergeSession, r as useProjectLiveData };
36
+ export { s as Button, y as CATEGORY_ELEMENTS, T as CodeBlock, l as Combobox, O as DecisionToggle, d as Dialog, _ as DialogHost, v as DocumentProgressBar, c as Dropdown, b as ELEMENT_TO_COLOR, x as ELEMENT_TO_ICON, k as ElementDetail, f as FeedbackDialog, N as MergeReview, A as MergeTree, u as MultiSelect, C as SclExplorer, j as TypeNameAuthority, D as XmlDiff, S as collectExpandableNodeIds, p as createDialogHost, e as createDocumentStore, m as dialogHostKey, E as diffLines, w as highlightCode, h as provideDialogHost, i as useActiveDocument, t as useDialecteChannel, g as useDialog, a as useDocumentProgress, o as useDocumentState, n as useLiveData, M as useMergeSession, r as useProjectLiveData };
@@ -1,5 +1,5 @@
1
1
  import e from "../external/.pnpm/@lucide_vue@1.23.0_vue@3.5.39_typescript@5.8.3_/node_modules/@lucide/vue/dist/esm/icons/triangle-alert.js";
2
- import { TEMPLATE_UUID_WARNING_INFO as t } from "../external/.pnpm/@dialecte_scl@0.3.13/node_modules/@dialecte/scl/dist/v2019C1/index.js";
2
+ import { TEMPLATE_UUID_WARNING_INFO as t } from "../external/.pnpm/@dialecte_scl@0.3.14/node_modules/@dialecte/scl/dist/v2019C1/index.js";
3
3
  import { Fragment as n, computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createVNode as s, defineComponent as c, openBlock as l, renderList as u, toDisplayString as d, unref as f } from "vue";
4
4
  //#region lib/merge/merge-preflight.vue?vue&type=script&setup=true&lang.ts
5
5
  var p = { class: "flex h-full min-h-0 flex-col" }, m = { class: "min-h-0 flex-1 overflow-auto p-4" }, h = { class: "mx-auto max-w-2xl space-y-4" }, g = { class: "flex items-start gap-3" }, _ = { class: "border-b border-warning/25 px-3 py-2" }, v = { class: "flex items-center gap-2" }, y = { class: "badge badge-soft badge-warning badge-sm font-medium" }, b = { class: "font-semibold" }, x = { class: "mt-1 text-sm text-base-content/80" }, S = { class: "mt-1 text-sm" }, C = { class: "text-base-content/80" }, w = { class: "divide-y divide-warning/15" }, T = { class: "font-mono break-all" }, E = { class: "text-base-content/70" }, D = {
@@ -1,5 +1,5 @@
1
- import { i as e } from "../external/.pnpm/@dialecte_scl@0.3.13/node_modules/@dialecte/scl/dist/hooks-D5DJSztS.js";
2
- import "../external/.pnpm/@dialecte_scl@0.3.13/node_modules/@dialecte/scl/dist/v2019C1/index.js";
1
+ import { i as e } from "../external/.pnpm/@dialecte_scl@0.3.14/node_modules/@dialecte/scl/dist/hooks-By65uB-0.js";
2
+ import "../external/.pnpm/@dialecte_scl@0.3.14/node_modules/@dialecte/scl/dist/v2019C1/index.js";
3
3
  //#region lib/merge/merge.service.ts
4
4
  async function t(e, t) {
5
5
  return e.query.lifecycle.report(t);
@@ -0,0 +1,5 @@
1
+ import e from "./document-progress-bar.vue_vue_type_script_setup_true_lang.js";
2
+ //#region lib/progress/document-progress-bar.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,25 @@
1
+ import { useDocumentProgress as e, useDocumentState as t } from "../dialecte/composables/use-document-state.js";
2
+ import "../dialecte/composables/index.js";
3
+ import { computed as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, defineComponent as o, openBlock as s, toDisplayString as c, unref as l } from "vue";
4
+ //#region lib/progress/document-progress-bar.vue?vue&type=script&setup=true&lang.ts
5
+ var u = {
6
+ key: 0,
7
+ class: "min-w-0 space-y-1"
8
+ }, d = { class: "flex items-center justify-between gap-2 text-xs" }, f = { class: "truncate text-base-content/70" }, p = { class: "shrink-0 text-base-content/50" }, m = ["value"], h = /*@__PURE__*/ o({
9
+ __name: "document-progress-bar",
10
+ props: {
11
+ document: {},
12
+ active: { type: Boolean },
13
+ fallbackLabel: { default: "Working…" }
14
+ },
15
+ setup(o) {
16
+ let h = o, g = t(() => h.document), _ = e(() => h.document), v = n(() => h.active ?? g.value.loading);
17
+ return (e, t) => v.value ? (s(), i("div", u, [a("div", d, [a("span", f, c(l(_).label || o.fallbackLabel), 1), a("span", p, c(Math.round(l(_).fraction * 100)) + "% ", 1)]), a("progress", {
18
+ class: "progress progress-primary w-full",
19
+ value: l(_).fraction,
20
+ max: "1"
21
+ }, null, 8, m)])) : r("", !0);
22
+ }
23
+ });
24
+ //#endregion
25
+ export { h as default };
@@ -0,0 +1,2 @@
1
+ import e from "./document-progress-bar.js";
2
+ export { e as DocumentProgressBar };