PageSourceSearch

https://app.sundaysky.com/client/faFilm.Dzt69dT8.js

js sundaysky.com collected 2026-09-24 08:29:19 UTC 9,946 bytes, 211 lines download raw bytes

1
2!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="622215a9-7c12-5822-a7a0-2014b1a1a3f0")}catch(e){}}();
3import { t as __commonJSMin } from "./rolldown-runtime.D1cXj70v.js";
4import { Br as isFeatureEnabled, so as featureFlagConst } from "./logReportUtils.Ca-hg6bk.js";
5import { Sa as GqlClientFeatureTypeDefinition, ed as useAccountFeatureFullDataQuery, nd as useAccountFeaturesAndPacksDataQuery } from "./graphqlClient.B8mBnpI6.js";
6//#region client/components/newNav/hooks/UseAccountFeatureFullData/useAccountFeatureFullData.ts
7var useAccountFeatureFullData = () => {
8	const { data, loading } = useAccountFeatureFullDataQuery();
9	return {
10		accountFeatureFullData: data?.currentAccount?.accountFeatureData ?? [],
11		loading
12	};
13};
14//#endregion
15//#region client/components/editor/Hooks/UseAccountFeaturesAndPacksData/useAccountFeaturesAndPacksData.ts
16var useAccountFeaturesAndPacksData = (skip) => {
17	const { data, loading } = useAccountFeaturesAndPacksDataQuery({ skip });
18	return {
19		accountFeaturesAndPacksData: data?.currentAccount?.accountFeaturesAndPacksData,
20		loading
21	};
22};
23//#endregion
24//#region common/creditUtils.ts
25/**
26* Calculate credits needed based on usage and credit configuration
27* @param unitUsage usage amount (in terms of units)
28* @param accountFeatureData account feature data
29* @returns number of credits needed
30*/
31function calculateCreditsNeeded(unitUsage, accountFeatureData) {
32	const normalizedUsage = Math.max(0, unitUsage);
33	if (accountFeatureData.unit_step && accountFeatureData.credits_per_unit_step) {
34		if (normalizedUsage === 0) return 0;
35		return ((normalizedUsage % accountFeatureData.unit_step === 0 ? normalizedUsage / accountFeatureData.unit_step - 1 : Math.floor(normalizedUsage / accountFeatureData.unit_step)) + 1) * accountFeatureData.credits_per_unit_step;
36	}
37	throw new Error("Credit configuration is missing. Either credits_per_unit or both unit_step and credits_per_unit_step must be defined.");
38}
39//#endregion
40//#region client/components/newNav/hooks/UseFeatureRestriction/useFeatureRestriction.ts
41var FeatureTypeCategoryMap = {
42	[GqlClientFeatureTypeDefinition.LIMIT_AVATAR_GENERATION_MINUTES]: "numeric",
43	[GqlClientFeatureTypeDefinition.LIMIT_GENERATE_AI_ASSET_IMAGE]: "numeric",
44	[GqlClientFeatureTypeDefinition.LIMIT_GENERATE_AI_ASSET_VIDEO]: "numeric",
45	[GqlClientFeatureTypeDefinition.LIMIT_GENERATE_AI_DRAFT_VIDEO]: "numeric",
46	[GqlClientFeatureTypeDefinition.LIMIT_CONTRIBUTORS_NUMBER]: "numeric",
47	[GqlClientFeatureTypeDefinition.LIMIT_CUSTOM_AVATAR_CREATIONS]: "numeric",
48	[GqlClientFeatureTypeDefinition.LIMIT_CUSTOM_VOICE_CREATIONS]: "numeric",
49	[GqlClientFeatureTypeDefinition.LIMIT_NARRATION_LOCALIZATION_MINUTES]: "numeric",
50	[GqlClientFeatureTypeDefinition.LIMIT_USERS_NUMBER]: "numeric",
51	[GqlClientFeatureTypeDefinition.LIMIT_AI_IMAGE_EDITING]: "numeric",
52	[GqlClientFeatureTypeDefinition.DISABLE_CUSTOM_SCENE_IN_ACCOUNT]: "boolean",
53	[GqlClientFeatureTypeDefinition.DISABLE_NARRATION_LOCALIZATION_IN_ACCOUNT]: "boolean",
54	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_AVATARS]: "boolean",
55	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_CUSTOM_AVATARS]: "boolean",
56	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_CUSTOM_VOICES]: "boolean",
57	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_IMAGE_GENERATION]: "boolean",
58	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_IMAGE_EDITING]: "boolean",
59	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_IMAGE_EDITING_ORIGIN_UPLOAD]: "boolean",
60	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_VIDEO_GENERATION]: "boolean",
61	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_VIDEO_GENERATION_ORIGIN_UPLOAD]: "boolean",
62	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_MUSIC_RECOMMENDATION]: "boolean",
63	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_NEW_FEATURES]: "boolean",
64	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_PROMPT_TO_VIDEO]: "boolean",
65	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_DOC_TO_VIDEO]: "boolean",
66	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_SCRIPT_TO_VIDEO]: "boolean",
67	[GqlClientFeatureTypeDefinition.USER_BLOCK_AI_TRANSLATION]: "boolean",
68	[GqlClientFeatureTypeDefinition.VIDEO_APPROVALS_REQUIRED]: "boolean"
69};
70var useNumericFeatureRestriction = (featureDefinition) => {
71	if (isFeatureEnabled(featureFlagConst._IMPROVED_TIERS_AND_CREDITS)) return useCreditFeatureRestriction(featureDefinition);
72	const { accountFeatureFullData, loading } = useAccountFeatureFullData();
73	const featureData = accountFeatureFullData.find((feature) => feature.featureTypeDefinition === featureDefinition);
74	const limit = (featureData?.featureRestrictionValue)?.value;
75	const usage = (featureData?.featureCurrentUsageInfo)?.value;
76	const isFeatureAllocated = limit > 0;
77	const limitReached = usage >= limit;
78	return {
79		loading,
80		limit,
81		usage,
82		balance: limit - usage,
83		limitReached,
84		isFeatureAllocated,
85		creditsBased: false
86	};
87};
88var useBooleanFeatureRestriction = (featureDefinition) => {
89	const { accountFeatureFullData, loading } = useAccountFeatureFullData();
90	return {
91		loading,
92		value: (accountFeatureFullData.find((feature) => feature.featureTypeDefinition === featureDefinition)?.featureRestrictionValue)?.value
93	};
94};
95/**
96* Hook for getting credit-based feature restrictions.
97* Uses useAccountFeaturesAndPacksData when the _IMPROVED_TIERS_AND_CREDITS feature flag is enabled
98*/
99var useCreditFeatureRestriction = (featureDefinition) => {
100	const { accountFeaturesAndPacksData, loading } = useAccountFeaturesAndPacksData();
101	const featureData = accountFeaturesAndPacksData?.find((feature) => feature.featureTypeDefinition === featureDefinition);
102	if (!featureData) return {
103		loading,
104		limit: 0,
105		usage: 0,
106		balance: 0,
107		isFeatureAllocated: false,
108		limitReached: true,
109		creditsBased: false
110	};
111	const allocated = featureData.allocated || 0;
112	const usage = featureData.usage || 0;
113	const balance = featureData.balance || 0;
114	return {
115		loading,
116		limit: allocated,
117		usage,
118		balance,
119		isFeatureAllocated: allocated > 0 || featureData.wasAllocated,
120		limitReached: balance <= 0,
121		creditsBased: featureData.creditsBased
122	};
123};
124var getCreditsCostFromPackFeature = (featureData, unitUsage) => {
125	const unitStep = featureData?.unitStep;
126	const creditsPerUnitStep = featureData?.creditsPerUnitStep;
127	if (!unitStep || !creditsPerUnitStep) return null;
128	return calculateCreditsNeeded(unitUsage, {
129		unit_step: unitStep,
130		credits_per_unit_step: creditsPerUnitStep
131	});
132};
133/**
134* Hook for getting DB-driven credit cost for a feature.
135* Assumes _IMPROVED_TIERS_AND_CREDITS is enabled (packs data is available).
136*/
137var useCreditsCostForFeature = (featureDefinition, unitUsage) => {
138	const { accountFeaturesAndPacksData, loading } = useAccountFeaturesAndPacksData();
139	const featureData = accountFeaturesAndPacksData?.find((feature) => feature.featureTypeDefinition === featureDefinition);
140	if (loading) return {
141		loading: true,
142		cost: null,
143		featureData
144	};
145	return {
146		loading: false,
147		cost: getCreditsCostFromPackFeature(featureData, unitUsage),
148		featureData
149	};
150};
151var getRestrictionValueFromFeatureData = (featureData) => {
152	return (featureData?.featureRestrictionValue)?.value;
153};
154var getBooleanRestrictionValueFromFeatureData = (featureData) => {
155	return getRestrictionValueFromFeatureData(featureData);
156};
157var getIsFeatureTierRestrictedBasedOnTypeFromSources = (accountFeatureFullData, accountFeaturesAndPacksData, tierFeatureName) => {
158	if (!tierFeatureName) return false;
159	if (FeatureTypeCategoryMap[tierFeatureName] === "boolean") {
160		const featureData = accountFeatureFullData?.find((f) => f.featureTypeDefinition === tierFeatureName);
161		return !!getBooleanRestrictionValueFromFeatureData(featureData);
162	}
163	if (isFeatureEnabled(featureFlagConst._IMPROVED_TIERS_AND_CREDITS) && accountFeaturesAndPacksData) {
164		const packFeature = accountFeaturesAndPacksData.find((f) => f.featureTypeDefinition === tierFeatureName);
165		return (packFeature?.allocated ? packFeature.allocated : 0) === 0;
166	}
167	const legacyFeature = accountFeatureFullData?.find((f) => f.featureTypeDefinition === tierFeatureName);
168	return getRestrictionValueFromFeatureData(legacyFeature) === 0;
169};
170//#endregion
171//#region node_modules/@fortawesome/pro-regular-svg-icons/faFilm.js
172var require_faFilm = /* @__PURE__ */ __commonJSMin(((exports) => {
173	Object.defineProperty(exports, "__esModule", { value: true });
174	var prefix = "far";
175	var iconName = "film";
176	var width = 448;
177	var height = 512;
178	var aliases = [
179		127902,
180		62368,
181		"film-alt",
182		"film-simple"
183	];
184	var unicode = "f008";
185	var svgPathData = "M160 432l128 0 0-352-128 0 0 352zM112 80L64 80c-8.8 0-16 7.2-16 16l0 32 64 0 0-48zm0 96l-64 0 0 56 64 0 0-56zm0 104l-64 0 0 56 64 0 0-56zm0 104l-64 0 0 32c0 8.8 7.2 16 16 16l48 0 0-48zM336 80l0 48 64 0 0-32c0-8.8-7.2-16-16-16l-48 0zm64 96l-64 0 0 56 64 0 0-56zm0 104l-64 0 0 56 64 0 0-56zm0 104l-64 0 0 48 48 0c8.8 0 16-7.2 16-16l0-32zM64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z";
186	exports.definition = {
187		prefix,
188		iconName,
189		icon: [
190			width,
191			height,
192			aliases,
193			unicode,
194			svgPathData
195		]
196	};
197	exports.faFilm = exports.definition;
198	exports.prefix = prefix;
199	exports.iconName = iconName;
200	exports.width = width;
201	exports.height = height;
202	exports.ligatures = aliases;
203	exports.unicode = unicode;
204	exports.svgPathData = svgPathData;
205	exports.aliases = aliases;
206}));
207//#endregion
208export { useNumericFeatureRestriction as a, useAccountFeatureFullData as c, useCreditsCostForFeature as i, getIsFeatureTierRestrictedBasedOnTypeFromSources as n, calculateCreditsNeeded as o, useBooleanFeatureRestriction as r, useAccountFeaturesAndPacksData as s, require_faFilm as t };
209
210//# sourceMappingURL=faFilm.Dzt69dT8.js.map
211//# debugId=622215a9-7c12-5822-a7a0-2014b1a1a3f0

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.