@cavuno/board 3.1.0 → 4.0.0

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 (77) hide show
  1. package/CHANGELOG.md +421 -0
  2. package/README.md +6 -2
  3. package/dist/{_spec-nkWAraS0.d.mts → _spec-GVe6WAfT.d.mts} +68 -59
  4. package/dist/{_spec-nkWAraS0.d.ts → _spec-GVe6WAfT.d.ts} +68 -59
  5. package/dist/bin.mjs +7 -2
  6. package/dist/blog-BsmKizpd.d.ts +29 -0
  7. package/dist/blog-Cf64mI8A.d.mts +29 -0
  8. package/dist/{salaries-BahBpxWT.d.ts → board-DUhgiacm.d.ts} +17 -29
  9. package/dist/{salaries-ChSqDBAM.d.mts → board-GGWJ4coe.d.mts} +17 -29
  10. package/dist/breadcrumbs-DFKr0HzU.d.mts +372 -0
  11. package/dist/breadcrumbs-DiccJhk4.d.ts +372 -0
  12. package/dist/chunk-2ETP5UH4.mjs +271 -0
  13. package/dist/chunk-BGKNXG4H.mjs +146 -0
  14. package/dist/chunk-DLSO6XXY.mjs +33 -0
  15. package/dist/chunk-T2KC6XGV.mjs +1060 -0
  16. package/dist/chunk-YEAQ3JEI.mjs +853 -0
  17. package/dist/doctor.js +1 -1
  18. package/dist/doctor.mjs +1 -1
  19. package/dist/filters.d.mts +25 -20
  20. package/dist/filters.d.ts +25 -20
  21. package/dist/filters.js +3 -692
  22. package/dist/filters.mjs +3 -690
  23. package/dist/format.d.mts +57 -230
  24. package/dist/format.d.ts +57 -230
  25. package/dist/format.js +355 -927
  26. package/dist/format.mjs +213 -931
  27. package/dist/go.js +11 -1
  28. package/dist/go.mjs +4 -29
  29. package/dist/index.d.mts +23 -75
  30. package/dist/index.d.ts +23 -75
  31. package/dist/index.js +11 -36
  32. package/dist/index.mjs +32 -313
  33. package/dist/{jobs-lVvKCBCU.d.mts → jobs-BuLpV8iy.d.mts} +4 -4
  34. package/dist/{jobs-BiEvL9d7.d.ts → jobs-QrbXOYB9.d.ts} +4 -4
  35. package/dist/paths.d.mts +89 -1
  36. package/dist/paths.d.ts +89 -1
  37. package/dist/paths.js +62 -14
  38. package/dist/paths.mjs +29 -78
  39. package/dist/route-contract.js +23 -13
  40. package/dist/route-contract.mjs +30 -1079
  41. package/dist/{search-CCyFWPi3.d.mts → search-Cr4noJJZ.d.mts} +14 -3
  42. package/dist/{search-CyRvVMUp.d.ts → search-DdsniXQv.d.ts} +14 -3
  43. package/dist/seo.d.mts +33 -189
  44. package/dist/seo.d.ts +33 -189
  45. package/dist/seo.js +197 -718
  46. package/dist/seo.mjs +44 -1417
  47. package/dist/server.d.mts +5 -5
  48. package/dist/server.d.ts +5 -5
  49. package/dist/server.mjs +5 -31
  50. package/dist/sitemap.d.mts +5 -5
  51. package/dist/sitemap.d.ts +5 -5
  52. package/dist/sitemap.js +25 -14
  53. package/dist/sitemap.mjs +22 -97
  54. package/dist/skills.js +1 -1
  55. package/dist/skills.mjs +1 -1
  56. package/dist/suggest.d.mts +2 -2
  57. package/dist/suggest.d.ts +2 -2
  58. package/dist/suggest.js +17 -3
  59. package/dist/suggest.mjs +17 -3
  60. package/dist/well-known.js +23 -13
  61. package/dist/well-known.mjs +4 -421
  62. package/package.json +5 -4
  63. package/skills/cavuno-board-applications/SKILL.md +4 -1
  64. package/skills/cavuno-board-filters/SKILL.md +11 -12
  65. package/skills/cavuno-board-format/SKILL.md +68 -56
  66. package/skills/cavuno-board-i18n/SKILL.md +102 -21
  67. package/skills/cavuno-board-search-suggestions/SKILL.md +8 -3
  68. package/skills/cavuno-board-seo/BLOG.md +4 -1
  69. package/skills/cavuno-board-seo/JOB_AND_BREADCRUMBS.md +5 -2
  70. package/skills/cavuno-board-seo/LISTING.md +35 -12
  71. package/skills/cavuno-board-seo/SALARY.md +83 -18
  72. package/skills/cavuno-board-seo/SKILL.md +3 -2
  73. package/skills/manifest.json +3 -3
  74. package/dist/board-NE98PlwN.d.ts +0 -16
  75. package/dist/board-muu8BI8P.d.mts +0 -16
  76. package/dist/ui-copy-CCkz6CVF.d.mts +0 -230
  77. package/dist/ui-copy-CCkz6CVF.d.ts +0 -230
package/dist/doctor.js CHANGED
@@ -57,7 +57,7 @@ function loadSkillCorpus(baseDir) {
57
57
  ).map((entry) => ({
58
58
  path: entry.name,
59
59
  content: (0, import_node_fs.readFileSync)((0, import_node_path.resolve)(skillDir, entry.name), "utf8")
60
- })).sort((a, b) => a.path.localeCompare(b.path));
60
+ })).sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
61
61
  return {
62
62
  ...skill,
63
63
  content: (0, import_node_fs.readFileSync)(skillPath, "utf8"),
package/dist/doctor.mjs CHANGED
@@ -27,7 +27,7 @@ function loadSkillCorpus(baseDir) {
27
27
  ).map((entry) => ({
28
28
  path: entry.name,
29
29
  content: readFileSync(resolve(skillDir, entry.name), "utf8")
30
- })).sort((a, b) => a.path.localeCompare(b.path));
30
+ })).sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
31
31
  return {
32
32
  ...skill,
33
33
  content: readFileSync(skillPath, "utf8"),
@@ -1,6 +1,27 @@
1
- import { B as BoardLabelOverrides } from './ui-copy-CCkz6CVF.mjs';
2
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-lVvKCBCU.mjs';
3
- import './_spec-nkWAraS0.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-BuLpV8iy.mjs';
2
+ import './_spec-GVe6WAfT.mjs';
3
+
4
+ /**
5
+ * `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
6
+ * search-param parsing for jobs-listing routes.
7
+ *
8
+ * One greppable convention across every tenant frontend: the vocabulary
9
+ * arrays mirror the hosted board; seniority URL parsing follows the hosted
10
+ * semantics exactly (trim, lowercase, dedupe — hand-typed URLs are messy).
11
+ *
12
+ * Map parsed filters onto the wire like:
13
+ * ```
14
+ * companySlug: filters.company,
15
+ * seniority: filters.seniority,
16
+ * remoteOption: filters.remoteOption ? [filters.remoteOption] : undefined,
17
+ * ```
18
+ * Company slugs are the URL identity; the API accepts them directly via
19
+ * `companySlug` — never resolve slug→id client-side.
20
+ *
21
+ * Display labels for seniority / sort / remote options are application-owned
22
+ * chrome words — this entry only ships the wire vocabulary and
23
+ * parsers.
24
+ */
4
25
 
5
26
  declare const REMOTE_OPTIONS: readonly RemoteOption[];
6
27
  /**
@@ -12,22 +33,6 @@ declare const EMPLOYMENT_TYPES: readonly EmploymentType[];
12
33
  declare const SENIORITIES: readonly Seniority[];
13
34
  declare const JOB_SORTS: readonly JobSort[];
14
35
  declare const DEFAULT_SORT: JobSort;
15
- /**
16
- * Seniority display labels in the board language (lexicon-backed, en+de),
17
- * ⊕ stored operator overrides (`jobCardLabels.seniority*`) when the
18
- * `labels` bag is passed.
19
- *
20
- * @example
21
- * seniorityLabels('de').executive; // "Führungskraft"
22
- */
23
- declare function seniorityLabels(locale: string, labels?: BoardLabelOverrides): Record<Seniority, string>;
24
- /**
25
- * Sort-dropdown labels in the board language, resolved from the copy
26
- * catalog (`uiCopy(locale).jobCard`) ⊕ stored operator overrides
27
- * (`jobCardLabels.aiRankedLabel` / `sortNewestLabel` / `sortSalaryHighLabel`)
28
- * when the `labels` bag is passed.
29
- */
30
- declare function sortLabels(locale: string, labels?: BoardLabelOverrides): Record<JobSort, string>;
31
36
  interface ListingFilters {
32
37
  q?: string;
33
38
  remoteOption?: RemoteOption;
@@ -66,4 +71,4 @@ declare function parseCompany(raw: unknown): string[] | undefined;
66
71
  */
67
72
  declare function parseListingFilters(search: Record<string, unknown>): ListingFilters;
68
73
 
69
- export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCompany, parseListingFilters, parseSeniority, seniorityLabels, sortLabels };
74
+ export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCompany, parseListingFilters, parseSeniority };
package/dist/filters.d.ts CHANGED
@@ -1,6 +1,27 @@
1
- import { B as BoardLabelOverrides } from './ui-copy-CCkz6CVF.js';
2
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-BiEvL9d7.js';
3
- import './_spec-nkWAraS0.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-QrbXOYB9.js';
2
+ import './_spec-GVe6WAfT.js';
3
+
4
+ /**
5
+ * `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
6
+ * search-param parsing for jobs-listing routes.
7
+ *
8
+ * One greppable convention across every tenant frontend: the vocabulary
9
+ * arrays mirror the hosted board; seniority URL parsing follows the hosted
10
+ * semantics exactly (trim, lowercase, dedupe — hand-typed URLs are messy).
11
+ *
12
+ * Map parsed filters onto the wire like:
13
+ * ```
14
+ * companySlug: filters.company,
15
+ * seniority: filters.seniority,
16
+ * remoteOption: filters.remoteOption ? [filters.remoteOption] : undefined,
17
+ * ```
18
+ * Company slugs are the URL identity; the API accepts them directly via
19
+ * `companySlug` — never resolve slug→id client-side.
20
+ *
21
+ * Display labels for seniority / sort / remote options are application-owned
22
+ * chrome words — this entry only ships the wire vocabulary and
23
+ * parsers.
24
+ */
4
25
 
5
26
  declare const REMOTE_OPTIONS: readonly RemoteOption[];
6
27
  /**
@@ -12,22 +33,6 @@ declare const EMPLOYMENT_TYPES: readonly EmploymentType[];
12
33
  declare const SENIORITIES: readonly Seniority[];
13
34
  declare const JOB_SORTS: readonly JobSort[];
14
35
  declare const DEFAULT_SORT: JobSort;
15
- /**
16
- * Seniority display labels in the board language (lexicon-backed, en+de),
17
- * ⊕ stored operator overrides (`jobCardLabels.seniority*`) when the
18
- * `labels` bag is passed.
19
- *
20
- * @example
21
- * seniorityLabels('de').executive; // "Führungskraft"
22
- */
23
- declare function seniorityLabels(locale: string, labels?: BoardLabelOverrides): Record<Seniority, string>;
24
- /**
25
- * Sort-dropdown labels in the board language, resolved from the copy
26
- * catalog (`uiCopy(locale).jobCard`) ⊕ stored operator overrides
27
- * (`jobCardLabels.aiRankedLabel` / `sortNewestLabel` / `sortSalaryHighLabel`)
28
- * when the `labels` bag is passed.
29
- */
30
- declare function sortLabels(locale: string, labels?: BoardLabelOverrides): Record<JobSort, string>;
31
36
  interface ListingFilters {
32
37
  q?: string;
33
38
  remoteOption?: RemoteOption;
@@ -66,4 +71,4 @@ declare function parseCompany(raw: unknown): string[] | undefined;
66
71
  */
67
72
  declare function parseListingFilters(search: Record<string, unknown>): ListingFilters;
68
73
 
69
- export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCompany, parseListingFilters, parseSeniority, seniorityLabels, sortLabels };
74
+ export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCompany, parseListingFilters, parseSeniority };