@burdenoff/microfe-hookmovies 2026.827.1 → 2026.830.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.
@@ -1 +1 @@
1
- {"version":3,"file":"HookMoviesRoot.d.ts","sourceRoot":"","sources":["../../src/hookmovies/HookMoviesRoot.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAmBhC,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,SAAS,CAAC;AAY5D,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAiJlD,CAAC"}
1
+ {"version":3,"file":"HookMoviesRoot.d.ts","sourceRoot":"","sources":["../../src/hookmovies/HookMoviesRoot.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAmBhC,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,SAAS,CAAC;AAY5D,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA0IlD,CAAC"}
@@ -1,129 +1,126 @@
1
1
  import { HookMoviesProvider as e } from "./context/HookMoviesContext.js";
2
- import { HookMoviesRoutes as t } from "./HookMoviesRoutes.js";
3
- import { useCallback as n, useEffect as r } from "react";
2
+ import { useTr as t } from "../shared/hooks/useTr.js";
3
+ import { HookMoviesRoutes as n } from "./HookMoviesRoutes.js";
4
+ import { useEffect as r } from "react";
4
5
  import { QueryClient as i, QueryClientProvider as a } from "@tanstack/react-query";
5
- import { useI18n as o } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
- import { Building2 as s, Clapperboard as c, Film as l, Home as u, ListVideo as d, Megaphone as f, ScrollText as p, Star as m, Ticket as h, Users as g } from "lucide-react";
7
- import { jsx as _ } from "react/jsx-runtime";
8
- import { FeatureFlagProvider as v } from "@burdenoff/fe-libs/shared/feature-flags";
6
+ import { Building2 as o, Clapperboard as s, Film as c, Home as l, ListVideo as u, Megaphone as d, ScrollText as f, Star as p, Ticket as m, Users as h } from "lucide-react";
7
+ import { jsx as g } from "react/jsx-runtime";
8
+ import { FeatureFlagProvider as _ } from "@burdenoff/fe-libs/shared/feature-flags";
9
9
  //#region src/hookmovies/HookMoviesRoot.tsx
10
- var y = new i({ defaultOptions: { queries: {
10
+ var v = new i({ defaultOptions: { queries: {
11
11
  staleTime: 300 * 1e3,
12
12
  retry: 1
13
- } } }), b = (i) => {
14
- let { registerNavItems: b, registerFooterItems: x, basePath: S = "/" } = i, { t: C } = o(), w = n((e, t) => {
15
- let n = C(e);
16
- return n === e ? t : n;
17
- }, [C]), T = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
13
+ } } }), y = (i) => {
14
+ let { registerNavItems: y, registerFooterItems: b, basePath: x = "/" } = i, S = t(), C = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
18
15
  return r(() => {
19
- if (b) return b([
16
+ if (y) return y([
20
17
  {
21
18
  id: "hookmovies-home",
22
- label: w("hookmovies.nav.home", "Overview"),
23
- path: T(S, ""),
24
- icon: /* @__PURE__ */ _(u, { size: 20 }),
19
+ label: S("hookmovies.nav.home", "Overview"),
20
+ path: C(x, ""),
21
+ icon: /* @__PURE__ */ g(l, { size: 20 }),
25
22
  order: 1,
26
23
  group: "main"
27
24
  },
28
25
  {
29
26
  id: "hookmovies-titles",
30
- label: w("hookmovies.nav.titles", "Catalog"),
31
- path: T(S, "catalog/titles"),
32
- icon: /* @__PURE__ */ _(l, { size: 20 }),
27
+ label: S("hookmovies.nav.titles", "Catalog"),
28
+ path: C(x, "catalog/titles"),
29
+ icon: /* @__PURE__ */ g(c, { size: 20 }),
33
30
  order: 10,
34
31
  group: "catalog"
35
32
  },
36
33
  {
37
34
  id: "hookmovies-studios",
38
- label: w("hookmovies.nav.studios", "Studios"),
39
- path: T(S, "catalog/studios"),
40
- icon: /* @__PURE__ */ _(s, { size: 20 }),
35
+ label: S("hookmovies.nav.studios", "Studios"),
36
+ path: C(x, "catalog/studios"),
37
+ icon: /* @__PURE__ */ g(o, { size: 20 }),
41
38
  order: 11,
42
39
  group: "catalog"
43
40
  },
44
41
  {
45
42
  id: "hookmovies-people",
46
- label: w("hookmovies.nav.people", "People"),
47
- path: T(S, "catalog/people"),
48
- icon: /* @__PURE__ */ _(g, { size: 20 }),
43
+ label: S("hookmovies.nav.people", "People"),
44
+ path: C(x, "catalog/people"),
45
+ icon: /* @__PURE__ */ g(h, { size: 20 }),
49
46
  order: 12,
50
47
  group: "catalog"
51
48
  },
52
49
  {
53
50
  id: "hookmovies-productions",
54
- label: w("hookmovies.nav.productions", "Productions"),
55
- path: T(S, "productions"),
56
- icon: /* @__PURE__ */ _(c, { size: 20 }),
51
+ label: S("hookmovies.nav.productions", "Productions"),
52
+ path: C(x, "productions"),
53
+ icon: /* @__PURE__ */ g(s, { size: 20 }),
57
54
  order: 20,
58
55
  group: "production"
59
56
  },
60
57
  {
61
58
  id: "hookmovies-auditions",
62
- label: w("hookmovies.nav.auditions", "Auditions"),
63
- path: T(S, "auditions"),
64
- icon: /* @__PURE__ */ _(f, { size: 20 }),
59
+ label: S("hookmovies.nav.auditions", "Auditions"),
60
+ path: C(x, "auditions"),
61
+ icon: /* @__PURE__ */ g(d, { size: 20 }),
65
62
  order: 21,
66
63
  group: "production"
67
64
  },
68
65
  {
69
66
  id: "hookmovies-reviews",
70
- label: w("hookmovies.nav.reviews", "Reviews"),
71
- path: T(S, "engagement/reviews"),
72
- icon: /* @__PURE__ */ _(m, { size: 20 }),
67
+ label: S("hookmovies.nav.reviews", "Reviews"),
68
+ path: C(x, "engagement/reviews"),
69
+ icon: /* @__PURE__ */ g(p, { size: 20 }),
73
70
  order: 30,
74
71
  group: "audience"
75
72
  },
76
73
  {
77
74
  id: "hookmovies-rights",
78
- label: w("hookmovies.nav.rights", "Rights & Distribution"),
79
- path: T(S, "distribution/rights"),
80
- icon: /* @__PURE__ */ _(p, { size: 20 }),
75
+ label: S("hookmovies.nav.rights", "Rights & Distribution"),
76
+ path: C(x, "distribution/rights"),
77
+ icon: /* @__PURE__ */ g(f, { size: 20 }),
81
78
  order: 31,
82
79
  group: "audience"
83
80
  },
84
81
  {
85
82
  id: "hookmovies-lists",
86
- label: w("hookmovies.nav.lists", "My Library"),
87
- path: T(S, "library/lists"),
88
- icon: /* @__PURE__ */ _(d, { size: 20 }),
83
+ label: S("hookmovies.nav.lists", "My Library"),
84
+ path: C(x, "library/lists"),
85
+ icon: /* @__PURE__ */ g(u, { size: 20 }),
89
86
  order: 40,
90
87
  group: "library"
91
88
  },
92
89
  {
93
90
  id: "hookmovies-entitlements",
94
- label: w("hookmovies.nav.entitlements", "My Entitlements"),
95
- path: T(S, "library/entitlements"),
96
- icon: /* @__PURE__ */ _(h, { size: 20 }),
91
+ label: S("hookmovies.nav.entitlements", "My Entitlements"),
92
+ path: C(x, "library/entitlements"),
93
+ icon: /* @__PURE__ */ g(m, { size: 20 }),
97
94
  order: 41,
98
95
  group: "library"
99
96
  }
100
97
  ]);
101
98
  }, [
102
- b,
103
- S,
104
- w
99
+ y,
100
+ x,
101
+ S
105
102
  ]), r(() => {
106
- if (x) return x([{
103
+ if (b) return b([{
107
104
  id: "hookmovies-status",
108
- label: w("hookmovies.footer.ready", "HookMovies Ready"),
105
+ label: S("hookmovies.footer.ready", "HookMovies Ready"),
109
106
  type: "status",
110
107
  order: 10,
111
108
  section: "left"
112
109
  }]);
113
- }, [x, w]), /* @__PURE__ */ _(a, {
114
- client: y,
115
- children: /* @__PURE__ */ _(v, {
110
+ }, [b, S]), /* @__PURE__ */ g(a, {
111
+ client: v,
112
+ children: /* @__PURE__ */ g(_, {
116
113
  workspaceId: null,
117
114
  gateway: "global",
118
115
  defaultEnabled: !0,
119
- children: /* @__PURE__ */ _(e, {
116
+ children: /* @__PURE__ */ g(e, {
120
117
  ...i,
121
- children: /* @__PURE__ */ _(t, {})
118
+ children: /* @__PURE__ */ g(n, {})
122
119
  })
123
120
  })
124
121
  });
125
122
  };
126
123
  //#endregion
127
- export { b as HookMoviesRoot };
124
+ export { y as HookMoviesRoot };
128
125
 
129
126
  //# sourceMappingURL=HookMoviesRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HookMoviesRoot.js","names":[],"sources":["../../src/hookmovies/HookMoviesRoot.tsx"],"sourcesContent":["/**\n * HookMovies Root Component\n * @module hookmovies\n */\n\nimport type { FC } from 'react';\nimport { useCallback, useEffect } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Home,\n Film,\n Building2,\n Users,\n Clapperboard,\n Megaphone,\n Star,\n ScrollText,\n ListVideo,\n Ticket,\n} from 'lucide-react';\nimport { HookMoviesProvider } from './context/HookMoviesContext';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { HookMoviesRoutes } from './HookMoviesRoutes';\nimport type { HookMoviesRootProps, NavItem } from './types';\n\n// Create a query client for this microfrontend\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\nexport const HookMoviesRoot: FC<HookMoviesRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t: translate } = useI18n();\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n // Helper to join paths correctly\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with shell on mount\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n // Overview\n {\n id: 'hookmovies-home',\n label: t('hookmovies.nav.home', 'Overview'),\n path: joinPath(basePath, ''),\n icon: <Home size={20} />,\n order: 1,\n group: 'main',\n },\n\n // Catalog\n {\n id: 'hookmovies-titles',\n label: t('hookmovies.nav.titles', 'Catalog'),\n path: joinPath(basePath, 'catalog/titles'),\n icon: <Film size={20} />,\n order: 10,\n group: 'catalog',\n },\n {\n id: 'hookmovies-studios',\n label: t('hookmovies.nav.studios', 'Studios'),\n path: joinPath(basePath, 'catalog/studios'),\n icon: <Building2 size={20} />,\n order: 11,\n group: 'catalog',\n },\n {\n id: 'hookmovies-people',\n label: t('hookmovies.nav.people', 'People'),\n path: joinPath(basePath, 'catalog/people'),\n icon: <Users size={20} />,\n order: 12,\n group: 'catalog',\n },\n\n // Production\n {\n id: 'hookmovies-productions',\n label: t('hookmovies.nav.productions', 'Productions'),\n path: joinPath(basePath, 'productions'),\n icon: <Clapperboard size={20} />,\n order: 20,\n group: 'production',\n },\n {\n id: 'hookmovies-auditions',\n label: t('hookmovies.nav.auditions', 'Auditions'),\n path: joinPath(basePath, 'auditions'),\n icon: <Megaphone size={20} />,\n order: 21,\n group: 'production',\n },\n\n // Audience & distribution\n {\n id: 'hookmovies-reviews',\n label: t('hookmovies.nav.reviews', 'Reviews'),\n path: joinPath(basePath, 'engagement/reviews'),\n icon: <Star size={20} />,\n order: 30,\n group: 'audience',\n },\n {\n id: 'hookmovies-rights',\n label: t('hookmovies.nav.rights', 'Rights & Distribution'),\n path: joinPath(basePath, 'distribution/rights'),\n icon: <ScrollText size={20} />,\n order: 31,\n group: 'audience',\n },\n\n // Library (self-scoped)\n {\n id: 'hookmovies-lists',\n label: t('hookmovies.nav.lists', 'My Library'),\n path: joinPath(basePath, 'library/lists'),\n icon: <ListVideo size={20} />,\n order: 40,\n group: 'library',\n },\n {\n id: 'hookmovies-entitlements',\n label: t('hookmovies.nav.entitlements', 'My Entitlements'),\n path: joinPath(basePath, 'library/entitlements'),\n icon: <Ticket size={20} />,\n order: 41,\n group: 'library',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, t]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'hookmovies-status',\n label: t('hookmovies.footer.ready', 'HookMovies Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, t]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <HookMoviesProvider {...props}>\n <HookMoviesRoutes />\n </HookMoviesProvider>\n </FeatureFlagProvider>\n </QueryClientProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"HookMoviesRoot.js","names":[],"sources":["../../src/hookmovies/HookMoviesRoot.tsx"],"sourcesContent":["/**\n * HookMovies Root Component\n * @module hookmovies\n */\n\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport {\n Home,\n Film,\n Building2,\n Users,\n Clapperboard,\n Megaphone,\n Star,\n ScrollText,\n ListVideo,\n Ticket,\n} from 'lucide-react';\nimport { HookMoviesProvider } from './context/HookMoviesContext';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTr } from '../shared/hooks/useTr';\nimport { HookMoviesRoutes } from './HookMoviesRoutes';\nimport type { HookMoviesRootProps, NavItem } from './types';\n\n// Create a query client for this microfrontend\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\nexport const HookMoviesRoot: FC<HookMoviesRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const tr = useTr();\n\n // Helper to join paths correctly\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with shell on mount\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n // Overview\n {\n id: 'hookmovies-home',\n label: tr('hookmovies.nav.home', 'Overview'),\n path: joinPath(basePath, ''),\n icon: <Home size={20} />,\n order: 1,\n group: 'main',\n },\n\n // Catalog\n {\n id: 'hookmovies-titles',\n label: tr('hookmovies.nav.titles', 'Catalog'),\n path: joinPath(basePath, 'catalog/titles'),\n icon: <Film size={20} />,\n order: 10,\n group: 'catalog',\n },\n {\n id: 'hookmovies-studios',\n label: tr('hookmovies.nav.studios', 'Studios'),\n path: joinPath(basePath, 'catalog/studios'),\n icon: <Building2 size={20} />,\n order: 11,\n group: 'catalog',\n },\n {\n id: 'hookmovies-people',\n label: tr('hookmovies.nav.people', 'People'),\n path: joinPath(basePath, 'catalog/people'),\n icon: <Users size={20} />,\n order: 12,\n group: 'catalog',\n },\n\n // Production\n {\n id: 'hookmovies-productions',\n label: tr('hookmovies.nav.productions', 'Productions'),\n path: joinPath(basePath, 'productions'),\n icon: <Clapperboard size={20} />,\n order: 20,\n group: 'production',\n },\n {\n id: 'hookmovies-auditions',\n label: tr('hookmovies.nav.auditions', 'Auditions'),\n path: joinPath(basePath, 'auditions'),\n icon: <Megaphone size={20} />,\n order: 21,\n group: 'production',\n },\n\n // Audience & distribution\n {\n id: 'hookmovies-reviews',\n label: tr('hookmovies.nav.reviews', 'Reviews'),\n path: joinPath(basePath, 'engagement/reviews'),\n icon: <Star size={20} />,\n order: 30,\n group: 'audience',\n },\n {\n id: 'hookmovies-rights',\n label: tr('hookmovies.nav.rights', 'Rights & Distribution'),\n path: joinPath(basePath, 'distribution/rights'),\n icon: <ScrollText size={20} />,\n order: 31,\n group: 'audience',\n },\n\n // Library (self-scoped)\n {\n id: 'hookmovies-lists',\n label: tr('hookmovies.nav.lists', 'My Library'),\n path: joinPath(basePath, 'library/lists'),\n icon: <ListVideo size={20} />,\n order: 40,\n group: 'library',\n },\n {\n id: 'hookmovies-entitlements',\n label: tr('hookmovies.nav.entitlements', 'My Entitlements'),\n path: joinPath(basePath, 'library/entitlements'),\n icon: <Ticket size={20} />,\n order: 41,\n group: 'library',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, tr]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'hookmovies-status',\n label: tr('hookmovies.footer.ready', 'HookMovies Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, tr]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <HookMoviesProvider {...props}>\n <HookMoviesRoutes />\n </HookMoviesProvider>\n </FeatureFlagProvider>\n </QueryClientProvider>\n );\n};\n"],"mappings":";;;;;;;;;AA2BA,IAAM,IAAc,IAAI,EAAY,EAClC,gBAAgB,EACd,SAAS;CACP,WAAW,MAAS;CACpB,OAAO;CACR,EACF,EACF,CAAC,EAEW,KAA2C,MAAU;CAChE,IAAM,EAAE,qBAAkB,wBAAqB,cAAW,QAAQ,GAC5D,IAAK,GAAO,EAGZ,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AA0HtD,QArHA,QAAgB;AACT,QA+FL,QADgB,EA5FY;GAE1B;IACE,IAAI;IACJ,OAAO,EAAG,uBAAuB,WAAW;IAC5C,MAAM,EAAS,GAAU,GAAG;IAC5B,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,yBAAyB,UAAU;IAC7C,MAAM,EAAS,GAAU,iBAAiB;IAC1C,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,0BAA0B,UAAU;IAC9C,MAAM,EAAS,GAAU,kBAAkB;IAC3C,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,yBAAyB,SAAS;IAC5C,MAAM,EAAS,GAAU,iBAAiB;IAC1C,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,8BAA8B,cAAc;IACtD,MAAM,EAAS,GAAU,cAAc;IACvC,MAAM,kBAAC,GAAD,EAAc,MAAM,IAAM,CAAA;IAChC,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,4BAA4B,YAAY;IAClD,MAAM,EAAS,GAAU,YAAY;IACrC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,0BAA0B,UAAU;IAC9C,MAAM,EAAS,GAAU,qBAAqB;IAC9C,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,yBAAyB,wBAAwB;IAC3D,MAAM,EAAS,GAAU,sBAAsB;IAC/C,MAAM,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;IAC9B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,wBAAwB,aAAa;IAC/C,MAAM,EAAS,GAAU,gBAAgB;IACzC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,+BAA+B,kBAAkB;IAC3D,MAAM,EAAS,GAAU,uBAAuB;IAChD,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GACF,CAEyC;IAEzC;EAAC;EAAkB;EAAU;EAAG,CAAC,EAGpC,QAAgB;AACT,QAaL,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO,EAAG,2BAA2B,mBAAmB;GACxD,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,GAAqB,EAAG,CAAC,EAG3B,kBAAC,GAAD;EAAqB,QAAQ;YAC3B,kBAAC,GAAD;GAAqB,aAAa;GAAM,SAAQ;GAAS,gBAAgB;aACvE,kBAAC,GAAD;IAAoB,GAAI;cACtB,kBAAC,GAAD,EAAoB,CAAA;IACD,CAAA;GACD,CAAA;EACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddToListButton.d.ts","sourceRoot":"","sources":["../../../src/hookmovies/components/AddToListButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAuC,MAAM,OAAO,CAAC;AA8BrE,UAAU,oBAAoB;IAC5B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA4SpD,CAAC"}
1
+ {"version":3,"file":"AddToListButton.d.ts","sourceRoot":"","sources":["../../../src/hookmovies/components/AddToListButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAuC,MAAM,OAAO,CAAC;AA+BrE,UAAU,oBAAoB;IAC5B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA0UpD,CAAC"}
@@ -1,208 +1,209 @@
1
- import { cn as e } from "../utils/cn.js";
2
- import { parseListItems as t, useCreateList as n, useMyLists as r, useUpdateList as i } from "../hooks/useHookMoviesApi.js";
3
- import { ErrorState as a, LoadingState as o } from "./StateViews.js";
4
- import { useEffect as s, useState as c } from "react";
5
- import { Bookmark as l, Check as u, ListPlus as d, ListVideo as f, Loader2 as p, Plus as m, X as h } from "lucide-react";
6
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
1
+ import { useTr as e } from "../../shared/hooks/useTr.js";
2
+ import { cn as t } from "../utils/cn.js";
3
+ import { parseListItems as n, useCreateList as r, useMyLists as i, useUpdateList as a } from "../hooks/useHookMoviesApi.js";
4
+ import { ErrorState as o, LoadingState as s } from "./StateViews.js";
5
+ import { useEffect as c, useState as l } from "react";
6
+ import { Bookmark as u, Check as d, ListPlus as f, ListVideo as p, Loader2 as m, Plus as h, X as g } from "lucide-react";
7
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
7
8
  //#region src/hookmovies/components/AddToListButton.tsx
8
- var y = {
9
+ var b = {
9
10
  limit: 100,
10
11
  offset: 0
11
- }, b = ["WATCHLIST", "PLAYLIST"], x = {
12
- WATCHLIST: l,
13
- PLAYLIST: f
14
- }, S = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), C = "w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]", w = "mb-1.5 block text-xs font-medium text-text-secondary", T = ({ titleId: l, titleName: f, variant: T = "cta", className: E }) => {
15
- let [D, O] = c(!1), [k, A] = c(!1), [j, M] = c(null), [N, P] = c(null), [F, I] = c(""), [L, R] = c("WATCHLIST"), z = r(void 0, y), B = i(), V = n(), H = z.data?.items ?? [], U = H.filter((e) => t(e.items).some((e) => e.titleId === l)).length > 0;
16
- s(() => {
17
- if (!D) return;
12
+ }, x = ["WATCHLIST", "PLAYLIST"], S = {
13
+ WATCHLIST: u,
14
+ PLAYLIST: p
15
+ }, C = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), w = "w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]", T = "mb-1.5 block text-xs font-medium text-text-secondary", E = ({ titleId: u, titleName: p, variant: E = "cta", className: D }) => {
16
+ let O = e(), [k, A] = l(!1), [j, M] = l(!1), [N, P] = l(null), [F, I] = l(null), [L, R] = l(""), [z, B] = l("WATCHLIST"), V = i(void 0, b), H = a(), U = r(), W = V.data?.items ?? [], G = W.filter((e) => n(e.items).some((e) => e.titleId === u)).length > 0;
17
+ c(() => {
18
+ if (!k) return;
18
19
  let e = (e) => {
19
- e.key === "Escape" && O(!1);
20
+ e.key === "Escape" && A(!1);
20
21
  };
21
22
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
22
- }, [D]);
23
- let W = () => {
24
- O(!1), A(!1), P(null);
25
- }, G = async (e) => {
26
- P(null), M(e.id);
27
- let n = t(e.items), r = n.some((e) => e.titleId === l) ? n.filter((e) => e.titleId !== l) : [...n, {
28
- titleId: l,
23
+ }, [k]);
24
+ let K = () => {
25
+ A(!1), M(!1), I(null);
26
+ }, q = async (e) => {
27
+ I(null), P(e.id);
28
+ let t = n(e.items), r = t.some((e) => e.titleId === u) ? t.filter((e) => e.titleId !== u) : [...t, {
29
+ titleId: u,
29
30
  note: null
30
31
  }];
31
32
  try {
32
- await B.mutateAsync({
33
+ await H.mutateAsync({
33
34
  id: e.id,
34
35
  input: { items: r }
35
36
  });
36
37
  } catch (e) {
37
- P(e instanceof Error ? e.message : "Failed to update the list (you can only edit your own)");
38
+ I(e instanceof Error ? e.message : O("hookmovies.list.updateError", "Failed to update the list (you can only edit your own)"));
38
39
  } finally {
39
- M(null);
40
+ P(null);
40
41
  }
41
- }, K = async (e) => {
42
- if (e.preventDefault(), P(null), !F.trim()) {
43
- P("Name is required.");
42
+ }, J = async (e) => {
43
+ if (e.preventDefault(), I(null), !L.trim()) {
44
+ I(O("hookmovies.list.nameRequired", "Name is required."));
44
45
  return;
45
46
  }
46
47
  try {
47
- await V.mutateAsync({
48
- name: F.trim(),
49
- kind: L,
48
+ await U.mutateAsync({
49
+ name: L.trim(),
50
+ kind: z,
50
51
  visibility: "PRIVATE",
51
52
  items: [{
52
- titleId: l,
53
+ titleId: u,
53
54
  note: null
54
55
  }]
55
- }), I(""), R("WATCHLIST"), A(!1);
56
+ }), R(""), B("WATCHLIST"), M(!1);
56
57
  } catch (e) {
57
- P(e instanceof Error ? e.message : "Failed to create the list");
58
+ I(e instanceof Error ? e.message : O("hookmovies.list.createError", "Failed to create the list"));
58
59
  }
59
- }, q = f ? ` ${f}` : "", J = U ? "In your lists" : "Add to List";
60
- return /* @__PURE__ */ v(g, { children: [T === "icon" ? /* @__PURE__ */ _("button", {
60
+ }, Y = p ? ` ${p}` : "", X = G ? O("hookmovies.list.inYourLists", "In your lists") : O("hookmovies.list.addToList", "Add to List");
61
+ return /* @__PURE__ */ y(_, { children: [E === "icon" ? /* @__PURE__ */ v("button", {
61
62
  type: "button",
62
- onClick: () => O(!0),
63
- "aria-label": `${J}${q ? ` —${q}` : ""}`,
64
- title: J,
65
- className: e("inline-flex size-8 items-center justify-center rounded-lg border border-border-seam", "bg-bg-overlay/80 text-text-secondary backdrop-blur-sm transition-colors", "hover:border-border-strong hover:text-text-primary", "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", U && "text-status-success-text", E),
66
- children: _(U ? u : d, { className: "h-4 w-4" })
67
- }) : /* @__PURE__ */ v("button", {
63
+ onClick: () => A(!0),
64
+ "aria-label": `${X}${Y ? ` —${Y}` : ""}`,
65
+ title: X,
66
+ className: t("inline-flex size-8 items-center justify-center rounded-lg border border-border-seam", "bg-bg-overlay/80 text-text-secondary backdrop-blur-sm transition-colors", "hover:border-border-strong hover:text-text-primary", "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", G && "text-status-success-text", D),
67
+ children: v(G ? d : f, { className: "h-4 w-4" })
68
+ }) : /* @__PURE__ */ y("button", {
68
69
  type: "button",
69
- onClick: () => O(!0),
70
- "aria-label": `${J}${q ? ` —${q}` : ""}`,
71
- className: e("inline-flex items-center gap-2 rounded-xl border border-border-seam bg-bg-surface/60", "px-5 py-2.5 text-sm font-semibold text-text-primary backdrop-blur transition-colors", "hover:bg-bg-surface focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", E),
72
- children: [U ? /* @__PURE__ */ _(u, { className: "h-5 w-5 text-status-success-text" }) : /* @__PURE__ */ _(m, { className: "h-5 w-5" }), J]
73
- }), D && /* @__PURE__ */ _("div", {
70
+ onClick: () => A(!0),
71
+ "aria-label": `${X}${Y ? ` —${Y}` : ""}`,
72
+ className: t("inline-flex items-center gap-2 rounded-xl border border-border-seam bg-bg-surface/60", "px-5 py-2.5 text-sm font-semibold text-text-primary backdrop-blur transition-colors", "hover:bg-bg-surface focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", D),
73
+ children: [G ? /* @__PURE__ */ v(d, { className: "h-5 w-5 text-status-success-text" }) : /* @__PURE__ */ v(h, { className: "h-5 w-5" }), X]
74
+ }), k && /* @__PURE__ */ v("div", {
74
75
  className: "fixed inset-0 z-50 flex items-center justify-center bg-bg-canvas/90 p-4 backdrop-blur-sm",
75
76
  role: "dialog",
76
77
  "aria-modal": "true",
77
- "aria-label": `Add${q} to a list`,
78
- onClick: W,
79
- children: /* @__PURE__ */ v("div", {
78
+ "aria-label": O("hookmovies.list.dialogAria", "Add{{title}} to a list", { title: Y }),
79
+ onClick: K,
80
+ children: /* @__PURE__ */ y("div", {
80
81
  className: "relative w-full max-w-md overflow-hidden rounded-2xl border border-border-seam bg-bg-surface shadow-2xl",
81
82
  onClick: (e) => e.stopPropagation(),
82
- children: [/* @__PURE__ */ v("div", {
83
+ children: [/* @__PURE__ */ y("div", {
83
84
  className: "flex items-start justify-between gap-3 border-b border-border-seam px-5 py-4",
84
- children: [/* @__PURE__ */ v("div", {
85
+ children: [/* @__PURE__ */ y("div", {
85
86
  className: "min-w-0",
86
- children: [/* @__PURE__ */ _("h2", {
87
+ children: [/* @__PURE__ */ v("h2", {
87
88
  className: "text-sm font-semibold text-text-primary",
88
- children: "Add to a list"
89
- }), /* @__PURE__ */ _("p", {
89
+ children: O("hookmovies.list.dialogTitle", "Add to a list")
90
+ }), /* @__PURE__ */ v("p", {
90
91
  className: "mt-0.5 line-clamp-1 text-xs text-text-secondary",
91
- children: f ?? "Pick one of your watchlists or playlists."
92
+ children: p ?? O("hookmovies.list.dialogDescription", "Pick one of your watchlists or playlists.")
92
93
  })]
93
- }), /* @__PURE__ */ _("button", {
94
+ }), /* @__PURE__ */ v("button", {
94
95
  type: "button",
95
- onClick: W,
96
- "aria-label": "Close",
96
+ onClick: K,
97
+ "aria-label": O("common.close", "Close"),
97
98
  className: "rounded-md p-1 text-text-secondary transition-colors hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
98
- children: /* @__PURE__ */ _(h, { className: "h-4 w-4" })
99
+ children: /* @__PURE__ */ v(g, { className: "h-4 w-4" })
99
100
  })]
100
- }), /* @__PURE__ */ v("div", {
101
+ }), /* @__PURE__ */ y("div", {
101
102
  className: "px-5 py-4",
102
103
  children: [
103
- N && /* @__PURE__ */ _("div", {
104
+ F && /* @__PURE__ */ v("div", {
104
105
  role: "alert",
105
106
  className: "mb-3 rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text",
106
- children: N
107
+ children: F
107
108
  }),
108
- z.isLoading ? /* @__PURE__ */ _(o, {
109
- label: "Loading your lists…",
109
+ V.isLoading ? /* @__PURE__ */ v(s, {
110
+ label: O("hookmovies.list.loading", "Loading your lists…"),
110
111
  className: "min-h-[8rem]"
111
- }) : z.isError ? /* @__PURE__ */ _(a, {
112
- title: "Couldn't load your lists",
113
- onRetry: () => void z.refetch(),
112
+ }) : V.isError ? /* @__PURE__ */ v(o, {
113
+ title: O("hookmovies.list.loadError", "Couldn't load your lists"),
114
+ onRetry: () => void V.refetch(),
114
115
  className: "min-h-[8rem]"
115
- }) : H.length === 0 ? /* @__PURE__ */ _("p", {
116
+ }) : W.length === 0 ? /* @__PURE__ */ v("p", {
116
117
  className: "mb-3 text-sm text-text-secondary",
117
- children: "You don't have any lists yet — create one below and this title goes straight into it."
118
- }) : /* @__PURE__ */ _("ul", {
118
+ children: O("hookmovies.list.empty", "You don't have any lists yet — create one below and this title goes straight into it.")
119
+ }) : /* @__PURE__ */ v("ul", {
119
120
  className: "-mx-1 max-h-[45vh] space-y-1 overflow-y-auto px-1",
120
- children: H.map((n) => {
121
- let r = x[n.kind], i = t(n.items).some((e) => e.titleId === l), a = j === n.id;
122
- return /* @__PURE__ */ _("li", { children: /* @__PURE__ */ v("button", {
121
+ children: W.map((e) => {
122
+ let r = S[e.kind], i = n(e.items).some((e) => e.titleId === u), a = N === e.id;
123
+ return /* @__PURE__ */ v("li", { children: /* @__PURE__ */ y("button", {
123
124
  type: "button",
124
- onClick: () => void G(n),
125
+ onClick: () => void q(e),
125
126
  disabled: a,
126
127
  "aria-pressed": i,
127
- className: e("flex w-full items-center gap-3 rounded-lg border px-3 py-2 text-left transition-colors", "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", "disabled:opacity-60", i ? "border-status-success-border bg-status-success-bg-subtle" : "border-border-subtle hover:border-border-strong hover:bg-bg-sunken"),
128
+ className: t("flex w-full items-center gap-3 rounded-lg border px-3 py-2 text-left transition-colors", "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", "disabled:opacity-60", i ? "border-status-success-border bg-status-success-bg-subtle" : "border-border-subtle hover:border-border-strong hover:bg-bg-sunken"),
128
129
  children: [
129
- /* @__PURE__ */ _(r, { className: "h-4 w-4 shrink-0 text-text-secondary" }),
130
- /* @__PURE__ */ v("span", {
130
+ /* @__PURE__ */ v(r, { className: "h-4 w-4 shrink-0 text-text-secondary" }),
131
+ /* @__PURE__ */ y("span", {
131
132
  className: "min-w-0 flex-1",
132
- children: [/* @__PURE__ */ _("span", {
133
+ children: [/* @__PURE__ */ v("span", {
133
134
  className: "line-clamp-1 block text-sm font-medium text-text-primary",
134
- children: n.name
135
- }), /* @__PURE__ */ v("span", {
135
+ children: e.name
136
+ }), /* @__PURE__ */ y("span", {
136
137
  className: "block text-[11px] text-text-secondary",
137
138
  children: [
138
- S(n.kind),
139
+ C(e.kind),
139
140
  " · ",
140
- n.itemCount,
141
+ e.itemCount,
141
142
  " ",
142
- n.itemCount === 1 ? "item" : "items"
143
+ e.itemCount === 1 ? O("hookmovies.list.item", "item") : O("hookmovies.list.items", "items")
143
144
  ]
144
145
  })]
145
146
  }),
146
- a ? /* @__PURE__ */ _(p, { className: "h-4 w-4 shrink-0 animate-spin text-text-secondary" }) : i ? /* @__PURE__ */ _(u, { className: "h-4 w-4 shrink-0 text-status-success-text" }) : /* @__PURE__ */ _(m, { className: "h-4 w-4 shrink-0 text-text-secondary" })
147
+ a ? /* @__PURE__ */ v(m, { className: "h-4 w-4 shrink-0 animate-spin text-text-secondary" }) : i ? /* @__PURE__ */ v(d, { className: "h-4 w-4 shrink-0 text-status-success-text" }) : /* @__PURE__ */ v(h, { className: "h-4 w-4 shrink-0 text-text-secondary" })
147
148
  ]
148
- }) }, n.id);
149
+ }) }, e.id);
149
150
  })
150
151
  }),
151
- !z.isLoading && !z.isError && /* @__PURE__ */ _("div", {
152
+ !V.isLoading && !V.isError && /* @__PURE__ */ v("div", {
152
153
  className: "mt-3 border-t border-border-seam pt-3",
153
- children: k || H.length === 0 ? /* @__PURE__ */ v("form", {
154
- onSubmit: (e) => void K(e),
154
+ children: j || W.length === 0 ? /* @__PURE__ */ y("form", {
155
+ onSubmit: (e) => void J(e),
155
156
  className: "space-y-3",
156
157
  children: [
157
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
158
- htmlFor: `add-to-list-name-${l}`,
159
- className: w,
160
- children: "New list name *"
161
- }), /* @__PURE__ */ _("input", {
162
- id: `add-to-list-name-${l}`,
158
+ /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("label", {
159
+ htmlFor: `add-to-list-name-${u}`,
160
+ className: T,
161
+ children: [O("hookmovies.list.newListName", "New list name"), " *"]
162
+ }), /* @__PURE__ */ v("input", {
163
+ id: `add-to-list-name-${u}`,
163
164
  type: "text",
164
- value: F,
165
- onChange: (e) => I(e.target.value),
166
- placeholder: "e.g. Weekend Watch",
167
- className: C,
165
+ value: L,
166
+ onChange: (e) => R(e.target.value),
167
+ placeholder: O("hookmovies.list.newListPlaceholder", "e.g. Weekend Watch"),
168
+ className: w,
168
169
  autoFocus: !0,
169
170
  required: !0
170
171
  })] }),
171
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
172
- htmlFor: `add-to-list-kind-${l}`,
172
+ /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
173
+ htmlFor: `add-to-list-kind-${u}`,
174
+ className: T,
175
+ children: O("hookmovies.list.kind", "Kind")
176
+ }), /* @__PURE__ */ v("select", {
177
+ id: `add-to-list-kind-${u}`,
178
+ value: z,
179
+ onChange: (e) => B(e.target.value),
173
180
  className: w,
174
- children: "Kind"
175
- }), /* @__PURE__ */ _("select", {
176
- id: `add-to-list-kind-${l}`,
177
- value: L,
178
- onChange: (e) => R(e.target.value),
179
- className: C,
180
- children: b.map((e) => /* @__PURE__ */ _("option", {
181
+ children: x.map((e) => /* @__PURE__ */ v("option", {
181
182
  value: e,
182
- children: S(e)
183
+ children: C(e)
183
184
  }, e))
184
185
  })] }),
185
- /* @__PURE__ */ v("div", {
186
+ /* @__PURE__ */ y("div", {
186
187
  className: "flex items-center gap-2",
187
- children: [/* @__PURE__ */ v("button", {
188
+ children: [/* @__PURE__ */ y("button", {
188
189
  type: "submit",
189
- disabled: V.isPending,
190
+ disabled: U.isPending,
190
191
  className: "inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-medium text-action-primary-text transition-opacity hover:opacity-90 disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
191
- children: [/* @__PURE__ */ _(m, { className: "h-3.5 w-3.5" }), V.isPending ? "Creating…" : "Create & add"]
192
- }), H.length > 0 && /* @__PURE__ */ _("button", {
192
+ children: [/* @__PURE__ */ v(h, { className: "h-3.5 w-3.5" }), U.isPending ? O("hookmovies.list.creating", "Creating…") : O("hookmovies.list.createAndAdd", "Create & add")]
193
+ }), W.length > 0 && /* @__PURE__ */ v("button", {
193
194
  type: "button",
194
- onClick: () => A(!1),
195
- disabled: V.isPending,
195
+ onClick: () => M(!1),
196
+ disabled: U.isPending,
196
197
  className: "rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-secondary transition-colors hover:text-text-primary disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
197
- children: "Cancel"
198
+ children: O("common.cancel", "Cancel")
198
199
  })]
199
200
  })
200
201
  ]
201
- }) : /* @__PURE__ */ v("button", {
202
+ }) : /* @__PURE__ */ y("button", {
202
203
  type: "button",
203
- onClick: () => A(!0),
204
+ onClick: () => M(!0),
204
205
  className: "inline-flex items-center gap-2 text-xs font-medium text-text-secondary transition-colors hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] rounded",
205
- children: [/* @__PURE__ */ _(m, { className: "h-3.5 w-3.5" }), "New list"]
206
+ children: [/* @__PURE__ */ v(h, { className: "h-3.5 w-3.5" }), O("hookmovies.list.newList", "New list")]
206
207
  })
207
208
  })
208
209
  ]
@@ -211,6 +212,6 @@ var y = {
211
212
  })] });
212
213
  };
213
214
  //#endregion
214
- export { T as AddToListButton };
215
+ export { E as AddToListButton };
215
216
 
216
217
  //# sourceMappingURL=AddToListButton.js.map