@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260709113231 → 0.8.1-dev.20260711052655

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.
@@ -24,7 +24,8 @@ var InputControlType = {
24
24
  selectWithSearchInput: "selectWithSearchInput",
25
25
  selectWithSearchPanel: "selectWithSearchPanel",
26
26
  booleanSelect: "booleanSelect",
27
- switchInput: "switchInput"
27
+ switchInput: "switchInput",
28
+ videoInput: "videoInput"
28
29
  };
29
30
  var InputControlType_default = InputControlType;
30
31
 
@@ -881,8 +881,90 @@ var AssetUtility = class {
881
881
  };
882
882
  var AssetUtility_default = AssetUtility;
883
883
 
884
+ // src/components/controls/view/VideoView.tsx
885
+ import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
886
+ var parseAssets = (value) => {
887
+ if (!value) return [];
888
+ if (Array.isArray(value)) {
889
+ return value;
890
+ }
891
+ if (typeof value === "string") {
892
+ const trimmed = value.trim();
893
+ if (!trimmed) return [];
894
+ try {
895
+ const parsed = JSON.parse(trimmed);
896
+ if (Array.isArray(parsed)) {
897
+ return parsed;
898
+ }
899
+ if (parsed && typeof parsed === "object") {
900
+ return [parsed];
901
+ }
902
+ } catch {
903
+ return [{ assetUrl: trimmed }];
904
+ }
905
+ return [{ assetUrl: trimmed }];
906
+ }
907
+ if (typeof value === "object") {
908
+ return [value];
909
+ }
910
+ return [];
911
+ };
912
+ var VideoView = (props) => {
913
+ const assets = parseAssets(props.value);
914
+ const asset = assets.find((item) => item.type?.toLowerCase() === "video") ?? assets[0];
915
+ if (!asset?.assetUrl) {
916
+ return null;
917
+ }
918
+ const resolvedAssetUrl = AssetUtility_default.resolveUrl(props.assetBaseUrl ?? props.apiBaseUrl, asset.assetUrl);
919
+ const resolvedPosterUrl = asset.posterUrl ? AssetUtility_default.resolveUrl(props.assetBaseUrl ?? props.apiBaseUrl, asset.posterUrl) : void 0;
920
+ const isHls = resolvedAssetUrl?.endsWith(".m3u8");
921
+ const isVideoFile = /\.(mp4|webm|ogg|mov)$/i.test(resolvedAssetUrl ?? "");
922
+ const titleText = typeof asset.title === "string" ? asset.title : typeof props.customProps?.title === "string" ? props.customProps.title : "Video";
923
+ const fileName = typeof asset.title === "string" ? asset.title : asset.assetUrl?.split("/").pop() || "video";
924
+ const containerStyle = {
925
+ width: props.width || "100%"
926
+ };
927
+ const renderMedia = () => {
928
+ if (resolvedAssetUrl && isVideoFile) {
929
+ return /* @__PURE__ */ jsx15("div", { className: "w-full overflow-hidden rounded-lg bg-black", children: /* @__PURE__ */ jsxs15(
930
+ "video",
931
+ {
932
+ controls: true,
933
+ playsInline: true,
934
+ preload: "metadata",
935
+ poster: resolvedPosterUrl,
936
+ className: "w-full h-auto max-h-[70vh] object-contain bg-black",
937
+ style: { width: "100%" },
938
+ children: [
939
+ /* @__PURE__ */ jsx15("source", { src: resolvedAssetUrl }),
940
+ "Your browser does not support the video tag."
941
+ ]
942
+ }
943
+ ) });
944
+ }
945
+ return null;
946
+ };
947
+ return /* @__PURE__ */ jsxs15("div", { style: containerStyle, className: "flex flex-col gap-2", children: [
948
+ titleText ? /* @__PURE__ */ jsx15("div", { className: "font-medium text-sm", children: titleText }) : null,
949
+ renderMedia(),
950
+ resolvedAssetUrl ? /* @__PURE__ */ jsx15(
951
+ "a",
952
+ {
953
+ href: resolvedAssetUrl,
954
+ download: fileName,
955
+ target: "_blank",
956
+ rel: "noreferrer",
957
+ className: "inline-flex w-fit items-center rounded-md border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50",
958
+ children: "Download video"
959
+ }
960
+ ) : null
961
+ ] });
962
+ };
963
+ var VideoView_default = VideoView;
964
+
884
965
  export {
885
966
  AssetUtility_default,
967
+ VideoView_default,
886
968
  MultilineTextInput_default,
887
969
  LineTextInput_default,
888
970
  MoneyInput_default,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Constants
3
- } from "./chunk-UWFXFVUU.mjs";
3
+ } from "./chunk-DBHUCH4B.mjs";
4
4
 
5
5
  // src/clients/OdataBuilder.tsx
6
6
  var OdataBuilder = class {
@@ -0,0 +1,201 @@
1
+ "use client";
2
+
3
+ import {
4
+ Constants
5
+ } from "./chunk-5GHPW7SJ.mjs";
6
+
7
+ // src/clients/OdataBuilder.tsx
8
+ var OdataBuilder = class {
9
+ constructor(url) {
10
+ this.baseUrl = url;
11
+ this.top = Constants.pagesize.toString();
12
+ this.skip = "0";
13
+ this.keyword = "";
14
+ this.filterBy = "";
15
+ this.orderBy = "";
16
+ }
17
+ // parseSearchParams(ReadonlyUrlSearchParams): DataQuery {
18
+ // this.top = top;
19
+ // return this;
20
+ // }
21
+ setQuery(odata) {
22
+ if (odata) {
23
+ for (const key in odata) {
24
+ if (odata[key] != null && odata[key] != "") {
25
+ if (key == "$skip") {
26
+ this.setSkip(odata[key]);
27
+ }
28
+ if (key == "$filter") {
29
+ this.setFilter(odata[key]);
30
+ }
31
+ if (key == "$top") {
32
+ this.setTop(odata[key]);
33
+ }
34
+ if (key == "$orderby") {
35
+ this.setOrderBy(odata[key]);
36
+ }
37
+ if (key == "searchTerm") {
38
+ this.searchTerm = odata[key];
39
+ }
40
+ if (key == "searchCols") {
41
+ this.searchCols = odata[key];
42
+ }
43
+ }
44
+ }
45
+ }
46
+ return this;
47
+ }
48
+ // parseKeyValuePairs(inputString: string): { [key: string]: string } {
49
+ // return inputString.split('$')
50
+ // .map((pair) => pair.split('='))
51
+ // .reduce((result: { [key: string]: string }, [key, value]) => {
52
+ // if (key && value) {
53
+ // result[key.trim()] = value.trim();
54
+ // }
55
+ // return result;
56
+ // }, {});
57
+ // }
58
+ static getOdataQueryString(obj, defaultOrder) {
59
+ let queryString = "";
60
+ let skip = (obj && obj["$skip"]) ?? "0";
61
+ let top = (obj && obj["$top"]) ?? Constants.pagesize.toString();
62
+ queryString = `$skip=${skip}&$top=${top}&$count=true`;
63
+ if (obj?.["searchTerm"] && obj["searchTerm"].trim() !== "") {
64
+ queryString += `&searchTerm=${encodeURIComponent(obj["searchTerm"])}`;
65
+ }
66
+ if (obj?.["searchCols"] && obj["searchCols"].trim() !== "") {
67
+ queryString += `&searchCols=${encodeURIComponent(obj["searchCols"])}`;
68
+ }
69
+ if (obj) {
70
+ if (obj["$filter"] && obj["$filter"] !== null && obj["$filter"] !== "") {
71
+ queryString = queryString + `&$filter=${encodeURIComponent(obj["$filter"])}`;
72
+ }
73
+ if (obj["$orderby"] && obj["$orderby"] !== null && obj["$orderby"] !== "") {
74
+ queryString = queryString + `&$orderby=${encodeURIComponent(obj["$orderby"])}`;
75
+ } else if (defaultOrder) {
76
+ queryString = queryString + `&$orderby=${encodeURIComponent(defaultOrder)}`;
77
+ }
78
+ } else {
79
+ if (defaultOrder) {
80
+ queryString = queryString + `&$orderby=${encodeURIComponent(defaultOrder)}`;
81
+ }
82
+ }
83
+ return queryString;
84
+ }
85
+ setTop(top) {
86
+ this.top = top;
87
+ return this;
88
+ }
89
+ setSkip(skip) {
90
+ this.skip = skip;
91
+ return this;
92
+ }
93
+ setKeyword(keyword) {
94
+ this.keyword = keyword;
95
+ return this;
96
+ }
97
+ setFilter(filterBy) {
98
+ this.filterBy = filterBy;
99
+ return this;
100
+ }
101
+ setOrderBy(orderBy) {
102
+ this.orderBy = orderBy;
103
+ return this;
104
+ }
105
+ getPageNumber(pageSize) {
106
+ let pageNumber = 1;
107
+ if (this.skip && this.top) {
108
+ const skip = parseInt(this.skip);
109
+ const top = parseInt(this.top);
110
+ if (!isNaN(skip) && !isNaN(top)) {
111
+ pageNumber = skip / pageSize + 1;
112
+ }
113
+ }
114
+ return pageNumber;
115
+ }
116
+ getUrl() {
117
+ let url = `${this.baseUrl}?$skip=${this.skip}&$top=${this.top}&$count=true`;
118
+ if (this.filterBy !== null && this.filterBy !== "") {
119
+ url = url + `&$filter=${encodeURIComponent(this.filterBy)}`;
120
+ }
121
+ if (this.orderBy !== null && this.orderBy !== "") {
122
+ url = url + `&$orderby=${encodeURIComponent(this.orderBy)}`;
123
+ }
124
+ if (this.searchTerm) {
125
+ url += `&searchTerm=${encodeURIComponent(this.searchTerm)}`;
126
+ }
127
+ if (this.searchCols) {
128
+ url += `&searchCols=${encodeURIComponent(this.searchCols)}`;
129
+ }
130
+ console.log(url);
131
+ return url;
132
+ }
133
+ getNewOrderByUrl(orderBy) {
134
+ let url = `${this.baseUrl}?$skip=${0}&$top=${this.top}&$count=true`;
135
+ if (this.filterBy !== null && this.filterBy !== "") {
136
+ url = url + `&$filter=${encodeURIComponent(this.filterBy)}`;
137
+ }
138
+ if (this.searchTerm) {
139
+ url += `&searchTerm=${encodeURIComponent(this.searchTerm)}`;
140
+ }
141
+ if (this.searchCols) {
142
+ url += `&searchCols=${encodeURIComponent(this.searchCols)}`;
143
+ }
144
+ url = url + `&$orderby=${encodeURIComponent(orderBy)}`;
145
+ return url;
146
+ }
147
+ getNewFilterUrl(filterBy) {
148
+ let url = `${this.baseUrl}?$skip=${0}&$top=${this.top}&$count=true`;
149
+ if (filterBy !== null && filterBy !== "") {
150
+ url = url + `&$filter=${encodeURIComponent(filterBy)}`;
151
+ }
152
+ if (this.orderBy !== null && this.orderBy !== "") {
153
+ url = url + `&$orderby=${encodeURIComponent(this.orderBy)}`;
154
+ }
155
+ if (this.searchTerm) {
156
+ url += `&searchTerm=${encodeURIComponent(this.searchTerm)}`;
157
+ }
158
+ if (this.searchCols) {
159
+ url += `&searchCols=${encodeURIComponent(this.searchCols)}`;
160
+ }
161
+ return url;
162
+ }
163
+ getNewPageUrl(page) {
164
+ let skip = page * Constants.pagesize - Constants.pagesize;
165
+ let url = `${this.baseUrl}?$skip=${skip}&$top=${this.top}&$count=true`;
166
+ if (this.filterBy !== null && this.filterBy !== "") {
167
+ url = url + `&$filter=${encodeURIComponent(this.filterBy)}`;
168
+ }
169
+ if (this.orderBy !== null && this.orderBy !== "") {
170
+ url = url + `&$orderby=${encodeURIComponent(this.orderBy)}`;
171
+ }
172
+ if (this.searchTerm) {
173
+ url += `&searchTerm=${encodeURIComponent(this.searchTerm)}`;
174
+ }
175
+ if (this.searchCols) {
176
+ url += `&searchCols=${encodeURIComponent(this.searchCols)}`;
177
+ }
178
+ return url;
179
+ }
180
+ getNewPageSizeUrl(pageSize) {
181
+ const currentPage = this.getPageNumber(
182
+ parseInt(this.top || Constants.pagesize.toString())
183
+ );
184
+ const skip = (currentPage - 1) * pageSize;
185
+ let url = `${this.baseUrl}?$skip=${skip}&$top=${pageSize}&$count=true`;
186
+ if (this.filterBy !== null && this.filterBy !== "") {
187
+ url = url + `&$filter=${encodeURIComponent(this.filterBy)}`;
188
+ }
189
+ if (this.orderBy !== null && this.orderBy !== "") {
190
+ url = url + `&$orderby=${encodeURIComponent(this.orderBy)}`;
191
+ }
192
+ return url;
193
+ }
194
+ getOrderBy() {
195
+ return this.orderBy;
196
+ }
197
+ };
198
+
199
+ export {
200
+ OdataBuilder
201
+ };
package/dist/index.d.mts CHANGED
@@ -19,6 +19,7 @@ declare const ViewControlTypes: {
19
19
  lineText: string;
20
20
  emailText: string;
21
21
  asset: string;
22
+ video: string;
22
23
  multilineTextBullets: string;
23
24
  boolean: string;
24
25
  checkboxInput: string;
@@ -62,6 +63,7 @@ declare const InputControlType: {
62
63
  selectWithSearchPanel: string;
63
64
  booleanSelect: string;
64
65
  switchInput: string;
66
+ videoInput: string;
65
67
  };
66
68
 
67
69
  interface InputCallbackValues<T> {
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ declare const ViewControlTypes: {
19
19
  lineText: string;
20
20
  emailText: string;
21
21
  asset: string;
22
+ video: string;
22
23
  multilineTextBullets: string;
23
24
  boolean: string;
24
25
  checkboxInput: string;
@@ -62,6 +63,7 @@ declare const InputControlType: {
62
63
  selectWithSearchPanel: string;
63
64
  booleanSelect: string;
64
65
  switchInput: string;
66
+ videoInput: string;
65
67
  };
66
68
 
67
69
  interface InputCallbackValues<T> {