@arbetsformedlingen/yrkesvaljaren 2.0.5

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 (146) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +369 -0
  3. package/dist/cjs/af-validation-message-BzY5H0xU.js +16 -0
  4. package/dist/cjs/core-selector.cjs.entry.js +476 -0
  5. package/dist/cjs/digi-service-job-selector.cjs.entry.js +1619 -0
  6. package/dist/cjs/fuse-BTLNKxuL.js +1631 -0
  7. package/dist/cjs/geo-valjaren.cjs.entry.js +14910 -0
  8. package/dist/cjs/index-BOuTGlEp.js +1817 -0
  9. package/dist/cjs/index.cjs.js +14 -0
  10. package/dist/cjs/job-selector-demo.cjs.entry.js +692 -0
  11. package/dist/cjs/loader.cjs.js +12 -0
  12. package/dist/cjs/neobrutal-search.cjs.entry.js +171 -0
  13. package/dist/cjs/search.engine-D0cMelRi.js +489 -0
  14. package/dist/cjs/taxonomy-registry-DVmuDUpM.js +435 -0
  15. package/dist/cjs/types-CtHBl6Ra.js +14 -0
  16. package/dist/cjs/yrkesvaljaren.cjs.js +24 -0
  17. package/dist/collection/collection-manifest.json +15 -0
  18. package/dist/collection/components/core-selector/core-selector.css +803 -0
  19. package/dist/collection/components/core-selector/core-selector.js +761 -0
  20. package/dist/collection/components/core-selector/types.js +1 -0
  21. package/dist/collection/components/design-compat/af-icon.js +13 -0
  22. package/dist/collection/components/design-compat/af-label.js +2 -0
  23. package/dist/collection/components/design-compat/af-tag.js +6 -0
  24. package/dist/collection/components/design-compat/af-validation-message.js +11 -0
  25. package/dist/collection/components/design-compat/index.js +4 -0
  26. package/dist/collection/components/geovaljaren/geovaljaren.css +21 -0
  27. package/dist/collection/components/geovaljaren/geovaljaren.js +304 -0
  28. package/dist/collection/components/geovaljaren/logic/adapter.utils.js +20 -0
  29. package/dist/collection/components/geovaljaren/logic/data.utils.js +12 -0
  30. package/dist/collection/components/geovaljaren/logic/history-service.js +25 -0
  31. package/dist/collection/components/geovaljaren/logic/search.engine.js +28 -0
  32. package/dist/collection/components/job-selector/constants.js +26 -0
  33. package/dist/collection/components/job-selector/history-service.js +41 -0
  34. package/dist/collection/components/job-selector/job-selector-controller.js +835 -0
  35. package/dist/collection/components/job-selector/job-selector.css +318 -0
  36. package/dist/collection/components/job-selector/job-selector.js +1378 -0
  37. package/dist/collection/components/job-selector/keyboard-handlers.js +84 -0
  38. package/dist/collection/components/job-selector/logic/adapter.utils.js +75 -0
  39. package/dist/collection/components/job-selector/logic/label-formatter.js +118 -0
  40. package/dist/collection/components/job-selector/logic/search.engine.js +50 -0
  41. package/dist/collection/components/job-selector/search-logic.js +35 -0
  42. package/dist/collection/components/job-selector/search.utils.js +224 -0
  43. package/dist/collection/components/job-selector/suggestions-list.js +31 -0
  44. package/dist/collection/components/job-selector/taxonomy-registry.js +60 -0
  45. package/dist/collection/components/job-selector/test-data.mock.js +33 -0
  46. package/dist/collection/components/job-selector/types.js +10 -0
  47. package/dist/collection/components/job-selector/validation-message.js +24 -0
  48. package/dist/collection/demo-data.js +20 -0
  49. package/dist/collection/index.js +7 -0
  50. package/dist/collection/verkstad/verkstad.js +407 -0
  51. package/dist/components/core-selector.d.ts +11 -0
  52. package/dist/components/core-selector.js +1 -0
  53. package/dist/components/core-selector2.js +1 -0
  54. package/dist/components/digi-service-job-selector.d.ts +11 -0
  55. package/dist/components/digi-service-job-selector.js +1 -0
  56. package/dist/components/fuse.js +1 -0
  57. package/dist/components/geo-valjaren.d.ts +11 -0
  58. package/dist/components/geo-valjaren.js +1 -0
  59. package/dist/components/index.d.ts +35 -0
  60. package/dist/components/index.js +1 -0
  61. package/dist/components/job-selector-demo.d.ts +11 -0
  62. package/dist/components/job-selector-demo.js +1 -0
  63. package/dist/components/job-selector.js +1 -0
  64. package/dist/components/neobrutal-search.d.ts +11 -0
  65. package/dist/components/neobrutal-search.js +1 -0
  66. package/dist/components/search.engine.js +1 -0
  67. package/dist/components/types.js +1 -0
  68. package/dist/esm/af-validation-message-F8NIH2rC.js +14 -0
  69. package/dist/esm/core-selector.entry.js +474 -0
  70. package/dist/esm/digi-service-job-selector.entry.js +1617 -0
  71. package/dist/esm/fuse-BPnhMTul.js +1629 -0
  72. package/dist/esm/geo-valjaren.entry.js +14908 -0
  73. package/dist/esm/index-CGXZllj2.js +1806 -0
  74. package/dist/esm/index.js +10 -0
  75. package/dist/esm/job-selector-demo.entry.js +690 -0
  76. package/dist/esm/loader.js +10 -0
  77. package/dist/esm/neobrutal-search.entry.js +169 -0
  78. package/dist/esm/search.engine-nZ7AcXba.js +479 -0
  79. package/dist/esm/taxonomy-registry-Dw0VR9Aw.js +430 -0
  80. package/dist/esm/types-DHUftoZJ.js +12 -0
  81. package/dist/esm/yrkesvaljaren.js +20 -0
  82. package/dist/index.cjs.js +1 -0
  83. package/dist/index.js +1 -0
  84. package/dist/types/components/core-selector/core-selector.d.ts +46 -0
  85. package/dist/types/components/core-selector/types.d.ts +1 -0
  86. package/dist/types/components/design-compat/af-icon.d.ts +7 -0
  87. package/dist/types/components/design-compat/af-label.d.ts +8 -0
  88. package/dist/types/components/design-compat/af-tag.d.ts +8 -0
  89. package/dist/types/components/design-compat/af-validation-message.d.ts +9 -0
  90. package/dist/types/components/design-compat/index.d.ts +5 -0
  91. package/dist/types/components/geovaljaren/geovaljaren.d.ts +24 -0
  92. package/dist/types/components/geovaljaren/logic/adapter.utils.d.ts +7 -0
  93. package/dist/types/components/geovaljaren/logic/data.utils.d.ts +7 -0
  94. package/dist/types/components/geovaljaren/logic/history-service.d.ts +6 -0
  95. package/dist/types/components/geovaljaren/logic/search.engine.d.ts +7 -0
  96. package/dist/types/components/job-selector/ambient.d.ts +4 -0
  97. package/dist/types/components/job-selector/constants.d.ts +13 -0
  98. package/dist/types/components/job-selector/history-service.d.ts +6 -0
  99. package/dist/types/components/job-selector/job-selector-controller.d.ts +82 -0
  100. package/dist/types/components/job-selector/job-selector.d.ts +140 -0
  101. package/dist/types/components/job-selector/keyboard-handlers.d.ts +13 -0
  102. package/dist/types/components/job-selector/logic/adapter.utils.d.ts +12 -0
  103. package/dist/types/components/job-selector/logic/label-formatter.d.ts +4 -0
  104. package/dist/types/components/job-selector/logic/search.engine.d.ts +21 -0
  105. package/dist/types/components/job-selector/search-logic.d.ts +17 -0
  106. package/dist/types/components/job-selector/search.utils.d.ts +10 -0
  107. package/dist/types/components/job-selector/suggestions-list.d.ts +13 -0
  108. package/dist/types/components/job-selector/taxonomy-registry.d.ts +20 -0
  109. package/dist/types/components/job-selector/test-data.mock.d.ts +7 -0
  110. package/dist/types/components/job-selector/types.d.ts +107 -0
  111. package/dist/types/components/job-selector/validation-message.d.ts +8 -0
  112. package/dist/types/components/job-selector-demo/job-selector-demo.d.ts +55 -0
  113. package/dist/types/components/neobrutal-search/neobrutal-search.d.ts +18 -0
  114. package/dist/types/components.d.ts +425 -0
  115. package/dist/types/demo-data.d.ts +16 -0
  116. package/dist/types/index.d.ts +5 -0
  117. package/dist/types/stencil-public-runtime.d.ts +1873 -0
  118. package/dist/types/verkstad/verkstad.d.ts +1 -0
  119. package/dist/yrkesvaljaren/fuse-B0eHOxow.js.map +1 -0
  120. package/dist/yrkesvaljaren/index-Cy4BCo5s.js.map +1 -0
  121. package/dist/yrkesvaljaren/index-DfJXTQqL.js.map +1 -0
  122. package/dist/yrkesvaljaren/index.esm.js +1 -0
  123. package/dist/yrkesvaljaren/index.esm.js.map +1 -0
  124. package/dist/yrkesvaljaren/p-16636162.entry.js +1 -0
  125. package/dist/yrkesvaljaren/p-273cf6df.entry.js +1 -0
  126. package/dist/yrkesvaljaren/p-9e48afa4.entry.js +1 -0
  127. package/dist/yrkesvaljaren/p-BPnhMTul.js +1 -0
  128. package/dist/yrkesvaljaren/p-CGXZllj2.js +3 -0
  129. package/dist/yrkesvaljaren/p-DHUftoZJ.js +1 -0
  130. package/dist/yrkesvaljaren/p-DYFAzvqX.js +1 -0
  131. package/dist/yrkesvaljaren/p-Dw0VR9Aw.js +1 -0
  132. package/dist/yrkesvaljaren/p-aef7b5ae.entry.js +1 -0
  133. package/dist/yrkesvaljaren/p-b0f16abd.entry.js +1 -0
  134. package/dist/yrkesvaljaren/p-uBrs3sSs.js +1 -0
  135. package/dist/yrkesvaljaren/search.engine-DPT6roRm.js.map +1 -0
  136. package/dist/yrkesvaljaren/taxonomy-registry-s5khf6s4.js.map +1 -0
  137. package/dist/yrkesvaljaren/types-DHUftoZJ.js.map +1 -0
  138. package/dist/yrkesvaljaren/yrkesvaljaren.css +1 -0
  139. package/dist/yrkesvaljaren/yrkesvaljaren.esm.js +1 -0
  140. package/dist/yrkesvaljaren/yrkesvaljaren.esm.js.map +1 -0
  141. package/loader/cdn.js +1 -0
  142. package/loader/index.cjs.js +1 -0
  143. package/loader/index.d.ts +24 -0
  144. package/loader/index.es2017.js +1 -0
  145. package/loader/index.js +2 -0
  146. package/package.json +126 -0
@@ -0,0 +1,430 @@
1
+ function getDefaultExportFromCjs (x) {
2
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
3
+ }
4
+
5
+ var loglevel$1 = {exports: {}};
6
+
7
+ /*
8
+ * loglevel - https://github.com/pimterry/loglevel
9
+ *
10
+ * Copyright (c) 2013 Tim Perry
11
+ * Licensed under the MIT license.
12
+ */
13
+ var loglevel = loglevel$1.exports;
14
+
15
+ var hasRequiredLoglevel;
16
+
17
+ function requireLoglevel () {
18
+ if (hasRequiredLoglevel) return loglevel$1.exports;
19
+ hasRequiredLoglevel = 1;
20
+ (function (module) {
21
+ (function (root, definition) {
22
+ if (module.exports) {
23
+ module.exports = definition();
24
+ } else {
25
+ root.log = definition();
26
+ }
27
+ }(loglevel, function () {
28
+
29
+ // Slightly dubious tricks to cut down minimized file size
30
+ var noop = function() {};
31
+ var undefinedType = "undefined";
32
+ var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (
33
+ /Trident\/|MSIE /.test(window.navigator.userAgent)
34
+ );
35
+
36
+ var logMethods = [
37
+ "trace",
38
+ "debug",
39
+ "info",
40
+ "warn",
41
+ "error"
42
+ ];
43
+
44
+ var _loggersByName = {};
45
+ var defaultLogger = null;
46
+
47
+ // Cross-browser bind equivalent that works at least back to IE6
48
+ function bindMethod(obj, methodName) {
49
+ var method = obj[methodName];
50
+ if (typeof method.bind === 'function') {
51
+ return method.bind(obj);
52
+ } else {
53
+ try {
54
+ return Function.prototype.bind.call(method, obj);
55
+ } catch (e) {
56
+ // Missing bind shim or IE8 + Modernizr, fallback to wrapping
57
+ return function() {
58
+ return Function.prototype.apply.apply(method, [obj, arguments]);
59
+ };
60
+ }
61
+ }
62
+ }
63
+
64
+ // Trace() doesn't print the message in IE, so for that case we need to wrap it
65
+ function traceForIE() {
66
+ if (console.log) {
67
+ if (console.log.apply) {
68
+ console.log.apply(console, arguments);
69
+ } else {
70
+ // In old IE, native console methods themselves don't have apply().
71
+ Function.prototype.apply.apply(console.log, [console, arguments]);
72
+ }
73
+ }
74
+ if (console.trace) console.trace();
75
+ }
76
+
77
+ // Build the best logging method possible for this env
78
+ // Wherever possible we want to bind, not wrap, to preserve stack traces
79
+ function realMethod(methodName) {
80
+ if (methodName === 'debug') {
81
+ methodName = 'log';
82
+ }
83
+
84
+ if (typeof console === undefinedType) {
85
+ return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
86
+ } else if (methodName === 'trace' && isIE) {
87
+ return traceForIE;
88
+ } else if (console[methodName] !== undefined) {
89
+ return bindMethod(console, methodName);
90
+ } else if (console.log !== undefined) {
91
+ return bindMethod(console, 'log');
92
+ } else {
93
+ return noop;
94
+ }
95
+ }
96
+
97
+ // These private functions always need `this` to be set properly
98
+
99
+ function replaceLoggingMethods() {
100
+ /*jshint validthis:true */
101
+ var level = this.getLevel();
102
+
103
+ // Replace the actual methods.
104
+ for (var i = 0; i < logMethods.length; i++) {
105
+ var methodName = logMethods[i];
106
+ this[methodName] = (i < level) ?
107
+ noop :
108
+ this.methodFactory(methodName, level, this.name);
109
+ }
110
+
111
+ // Define log.log as an alias for log.debug
112
+ this.log = this.debug;
113
+
114
+ // Return any important warnings.
115
+ if (typeof console === undefinedType && level < this.levels.SILENT) {
116
+ return "No console available for logging";
117
+ }
118
+ }
119
+
120
+ // In old IE versions, the console isn't present until you first open it.
121
+ // We build realMethod() replacements here that regenerate logging methods
122
+ function enableLoggingWhenConsoleArrives(methodName) {
123
+ return function () {
124
+ if (typeof console !== undefinedType) {
125
+ replaceLoggingMethods.call(this);
126
+ this[methodName].apply(this, arguments);
127
+ }
128
+ };
129
+ }
130
+
131
+ // By default, we use closely bound real methods wherever possible, and
132
+ // otherwise we wait for a console to appear, and then try again.
133
+ function defaultMethodFactory(methodName, _level, _loggerName) {
134
+ /*jshint validthis:true */
135
+ return realMethod(methodName) ||
136
+ enableLoggingWhenConsoleArrives.apply(this, arguments);
137
+ }
138
+
139
+ function Logger(name, factory) {
140
+ // Private instance variables.
141
+ var self = this;
142
+ /**
143
+ * The level inherited from a parent logger (or a global default). We
144
+ * cache this here rather than delegating to the parent so that it stays
145
+ * in sync with the actual logging methods that we have installed (the
146
+ * parent could change levels but we might not have rebuilt the loggers
147
+ * in this child yet).
148
+ * @type {number}
149
+ */
150
+ var inheritedLevel;
151
+ /**
152
+ * The default level for this logger, if any. If set, this overrides
153
+ * `inheritedLevel`.
154
+ * @type {number|null}
155
+ */
156
+ var defaultLevel;
157
+ /**
158
+ * A user-specific level for this logger. If set, this overrides
159
+ * `defaultLevel`.
160
+ * @type {number|null}
161
+ */
162
+ var userLevel;
163
+
164
+ var storageKey = "loglevel";
165
+ if (typeof name === "string") {
166
+ storageKey += ":" + name;
167
+ } else if (typeof name === "symbol") {
168
+ storageKey = undefined;
169
+ }
170
+
171
+ function persistLevelIfPossible(levelNum) {
172
+ var levelName = (logMethods[levelNum] || 'silent').toUpperCase();
173
+
174
+ if (typeof window === undefinedType || !storageKey) return;
175
+
176
+ // Use localStorage if available
177
+ try {
178
+ window.localStorage[storageKey] = levelName;
179
+ return;
180
+ } catch (ignore) {}
181
+
182
+ // Use session cookie as fallback
183
+ try {
184
+ window.document.cookie =
185
+ encodeURIComponent(storageKey) + "=" + levelName + ";";
186
+ } catch (ignore) {}
187
+ }
188
+
189
+ function getPersistedLevel() {
190
+ var storedLevel;
191
+
192
+ if (typeof window === undefinedType || !storageKey) return;
193
+
194
+ try {
195
+ storedLevel = window.localStorage[storageKey];
196
+ } catch (ignore) {}
197
+
198
+ // Fallback to cookies if local storage gives us nothing
199
+ if (typeof storedLevel === undefinedType) {
200
+ try {
201
+ var cookie = window.document.cookie;
202
+ var cookieName = encodeURIComponent(storageKey);
203
+ var location = cookie.indexOf(cookieName + "=");
204
+ if (location !== -1) {
205
+ storedLevel = /^([^;]+)/.exec(
206
+ cookie.slice(location + cookieName.length + 1)
207
+ )[1];
208
+ }
209
+ } catch (ignore) {}
210
+ }
211
+
212
+ // If the stored level is not valid, treat it as if nothing was stored.
213
+ if (self.levels[storedLevel] === undefined) {
214
+ storedLevel = undefined;
215
+ }
216
+
217
+ return storedLevel;
218
+ }
219
+
220
+ function clearPersistedLevel() {
221
+ if (typeof window === undefinedType || !storageKey) return;
222
+
223
+ // Use localStorage if available
224
+ try {
225
+ window.localStorage.removeItem(storageKey);
226
+ } catch (ignore) {}
227
+
228
+ // Use session cookie as fallback
229
+ try {
230
+ window.document.cookie =
231
+ encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
232
+ } catch (ignore) {}
233
+ }
234
+
235
+ function normalizeLevel(input) {
236
+ var level = input;
237
+ if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
238
+ level = self.levels[level.toUpperCase()];
239
+ }
240
+ if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
241
+ return level;
242
+ } else {
243
+ throw new TypeError("log.setLevel() called with invalid level: " + input);
244
+ }
245
+ }
246
+
247
+ /*
248
+ *
249
+ * Public logger API - see https://github.com/pimterry/loglevel for details
250
+ *
251
+ */
252
+
253
+ self.name = name;
254
+
255
+ self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3,
256
+ "ERROR": 4, "SILENT": 5};
257
+
258
+ self.methodFactory = factory || defaultMethodFactory;
259
+
260
+ self.getLevel = function () {
261
+ if (userLevel != null) {
262
+ return userLevel;
263
+ } else if (defaultLevel != null) {
264
+ return defaultLevel;
265
+ } else {
266
+ return inheritedLevel;
267
+ }
268
+ };
269
+
270
+ self.setLevel = function (level, persist) {
271
+ userLevel = normalizeLevel(level);
272
+ if (persist !== false) { // defaults to true
273
+ persistLevelIfPossible(userLevel);
274
+ }
275
+
276
+ // NOTE: in v2, this should call rebuild(), which updates children.
277
+ return replaceLoggingMethods.call(self);
278
+ };
279
+
280
+ self.setDefaultLevel = function (level) {
281
+ defaultLevel = normalizeLevel(level);
282
+ if (!getPersistedLevel()) {
283
+ self.setLevel(level, false);
284
+ }
285
+ };
286
+
287
+ self.resetLevel = function () {
288
+ userLevel = null;
289
+ clearPersistedLevel();
290
+ replaceLoggingMethods.call(self);
291
+ };
292
+
293
+ self.enableAll = function(persist) {
294
+ self.setLevel(self.levels.TRACE, persist);
295
+ };
296
+
297
+ self.disableAll = function(persist) {
298
+ self.setLevel(self.levels.SILENT, persist);
299
+ };
300
+
301
+ self.rebuild = function () {
302
+ if (defaultLogger !== self) {
303
+ inheritedLevel = normalizeLevel(defaultLogger.getLevel());
304
+ }
305
+ replaceLoggingMethods.call(self);
306
+
307
+ if (defaultLogger === self) {
308
+ for (var childName in _loggersByName) {
309
+ _loggersByName[childName].rebuild();
310
+ }
311
+ }
312
+ };
313
+
314
+ // Initialize all the internal levels.
315
+ inheritedLevel = normalizeLevel(
316
+ defaultLogger ? defaultLogger.getLevel() : "WARN"
317
+ );
318
+ var initialLevel = getPersistedLevel();
319
+ if (initialLevel != null) {
320
+ userLevel = normalizeLevel(initialLevel);
321
+ }
322
+ replaceLoggingMethods.call(self);
323
+ }
324
+
325
+ /*
326
+ *
327
+ * Top-level API
328
+ *
329
+ */
330
+
331
+ defaultLogger = new Logger();
332
+
333
+ defaultLogger.getLogger = function getLogger(name) {
334
+ if ((typeof name !== "symbol" && typeof name !== "string") || name === "") {
335
+ throw new TypeError("You must supply a name when creating a logger.");
336
+ }
337
+
338
+ var logger = _loggersByName[name];
339
+ if (!logger) {
340
+ logger = _loggersByName[name] = new Logger(
341
+ name,
342
+ defaultLogger.methodFactory
343
+ );
344
+ }
345
+ return logger;
346
+ };
347
+
348
+ // Grab the current global log variable in case of overwrite
349
+ var _log = (typeof window !== undefinedType) ? window.log : undefined;
350
+ defaultLogger.noConflict = function() {
351
+ if (typeof window !== undefinedType &&
352
+ window.log === defaultLogger) {
353
+ window.log = _log;
354
+ }
355
+
356
+ return defaultLogger;
357
+ };
358
+
359
+ defaultLogger.getLoggers = function getLoggers() {
360
+ return _loggersByName;
361
+ };
362
+
363
+ // ES6 default export, for compatibility
364
+ defaultLogger['default'] = defaultLogger;
365
+
366
+ return defaultLogger;
367
+ }));
368
+ } (loglevel$1));
369
+ return loglevel$1.exports;
370
+ }
371
+
372
+ var loglevelExports = requireLoglevel();
373
+ var log = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
374
+
375
+ let registeredTaxonomy = [];
376
+ let registeredVersion = null;
377
+ function isRecord(value) {
378
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
379
+ }
380
+ function isNonEmptyString(value) {
381
+ return typeof value === 'string' && value.trim().length > 0;
382
+ }
383
+ function isOptionalString(value) {
384
+ return value === undefined || typeof value === 'string';
385
+ }
386
+ function isTaxonomyItem(value) {
387
+ if (!isRecord(value))
388
+ return false;
389
+ return (isNonEmptyString(value.id)
390
+ && (value.type === 'job-title' || value.type === 'occupation-name')
391
+ && isNonEmptyString(value.preferred_label)
392
+ && isOptionalString(value.ssyk_level_4_id)
393
+ && isOptionalString(value.ssyk_code_2012)
394
+ && isOptionalString(value.occupation_name_id)
395
+ && isOptionalString(value.occupation_name_preferred_label)
396
+ && (value.weight === undefined || (typeof value.weight === 'number' && Number.isFinite(value.weight))));
397
+ }
398
+ function isTaxonomyRegistration(value) {
399
+ if (!isRecord(value) || !Array.isArray(value.data) || value.data.length === 0) {
400
+ return false;
401
+ }
402
+ return value.data.every((item) => isTaxonomyItem(item));
403
+ }
404
+ /**
405
+ * Registrerar validerad taxonomidata för webbkomponenten.
406
+ * Ogiltig data ersätter aldrig en tidigare giltig registrering.
407
+ */
408
+ function registerTaxonomy(data) {
409
+ if (!isTaxonomyRegistration(data)) {
410
+ log.error('[TaxonomyRegistry] Felaktigt format på taxonomidata vid registrering.');
411
+ return;
412
+ }
413
+ registeredTaxonomy = data.data.map((item) => ({ ...item }));
414
+ const metadataVersion = isRecord(data.metadata)
415
+ ? data.metadata.labour_market_taxonomy_version
416
+ : undefined;
417
+ registeredVersion = metadataVersion !== undefined
418
+ ? String(metadataVersion)
419
+ : (data.taxonomyVersion !== undefined ? String(data.taxonomyVersion) : 'unknown');
420
+ log.debug(`[TaxonomyRegistry] Taxonomi version ${registeredVersion} registrerades med ${registeredTaxonomy.length} yrken.`);
421
+ }
422
+ /** Hämtar den registrerade taxonomin. */
423
+ function getRegisteredTaxonomy() {
424
+ if (registeredTaxonomy.length === 0) {
425
+ log.warn('[TaxonomyRegistry] Ingen taxonomi är registrerad ännu! Anropa registerTaxonomy(data) först.');
426
+ }
427
+ return registeredTaxonomy;
428
+ }
429
+
430
+ export { getRegisteredTaxonomy as g, isTaxonomyRegistration as i, log as l, registerTaxonomy as r };
@@ -0,0 +1,12 @@
1
+ class InvalidSelectionError extends Error {
2
+ code;
3
+ invalidIds;
4
+ constructor(message, code, invalidIds) {
5
+ super(message);
6
+ this.name = 'InvalidSelectionError';
7
+ this.code = code;
8
+ this.invalidIds = invalidIds;
9
+ }
10
+ }
11
+
12
+ export { InvalidSelectionError as I };
@@ -0,0 +1,20 @@
1
+ import { p as promiseResolve, g as globalScripts, b as bootstrapLazy } from './index-CGXZllj2.js';
2
+ export { s as setNonce } from './index-CGXZllj2.js';
3
+
4
+ /*
5
+ Stencil Client Patch Browser v4.44.1 | MIT Licensed | https://stenciljs.com
6
+ */
7
+
8
+ var patchBrowser = () => {
9
+ const importMeta = import.meta.url;
10
+ const opts = {};
11
+ if (importMeta !== "") {
12
+ opts.resourcesUrl = new URL(".", importMeta).href;
13
+ }
14
+ return promiseResolve(opts);
15
+ };
16
+
17
+ patchBrowser().then(async (options) => {
18
+ await globalScripts();
19
+ return bootstrapLazy([["job-selector-demo",[[512,"job-selector-demo",{"afHideHeader":[4,"af-hide-header"],"afHidePreamble":[4,"af-hide-preamble"],"variant":[32],"version":[32],"required":[32],"allowFreeText":[32],"history":[32],"size":[32],"framework":[32],"codeInstallationMode":[32],"lastSingleSelection":[32],"lastMultiSelection":[32],"implementationCode":[32],"readmeMainContent":[32],"readmeCodeContent":[32],"availableYvVersions":[32],"latestYvDataVersion":[32],"latestVersion":[32],"latestDate":[32],"latestType":[32],"latestChanges":[32],"isTaxonomyLoading":[32]},[[0,"afJobSelected","handleSelection"]]]]],["geo-valjaren",[[513,"geo-valjaren",{"label":[513,"af-label"],"placeholder":[513,"af-placeholder"],"selectorState":[32]},[[0,"csInput","handleInput"],[0,"csFocus","handleFocus"],[0,"csRequestHistory","handleRequestHistory"],[0,"csSelect","handleSelect"],[0,"csBlur","handleBlur"],[0,"csClear","handleClear"],[0,"csClearHistory","handleCsClearHistory"],[0,"csEditSelection","handleEdit"]]]]],["neobrutal-search",[[513,"neobrutal-search",{"engine":[32],"results":[32],"inputValue":[32],"isLoading":[32],"error":[32],"selectedItem":[32],"isFlipped":[32]}]]],["core-selector",[[785,"core-selector",{"state":[16],"config":[16],"label":[1],"labelDescription":[1,"label-description"],"componentId":[1,"component-id"],"size":[513,"cs-size"],"afFocused":[4,"af-focused"],"activeIndex":[32],"isFocusedInternal":[32],"isNavigatingWithKeyboard":[32],"setFocus":[64]},null,{"afFocused":[{"handleAfFocusedChange":0}],"config":[{"handleConfigChange":0}],"state":[{"handleStateChange":0}]}]]],["digi-service-job-selector",[[593,"digi-service-job-selector",{"name":[513],"taxonomyUrl":[513,"af-taxonomy-url"],"placeholder":[513,"af-placeholder"],"label":[513,"af-label"],"disabled":[516],"enableMultiple":[516,"af-enable-multiple"],"showSearchIcon":[516,"af-show-search-icon"],"errorMessage":[513,"af-error-message"],"labelDescription":[513,"af-label-description"],"required":[516,"af-required"],"manualInput":[516,"af-manual-input"],"history":[516,"af-history"],"popular":[516,"af-popular"],"size":[513,"af-size"],"taxonomyData":[1040],"afFocused":[32],"state":[32],"activeErrorType":[32],"animatingItemId":[32],"updateData":[64],"setSelection":[64],"setFocus":[64],"validate":[64],"checkValidity":[64],"reportValidity":[64],"getValidity":[64],"getValidationMessage":[64]},[[0,"afJobValidationChange","handleFormValidationSync"],[8,"hashchange","handleHashFocus"],[0,"csInput","handleInput"],[0,"csSelect","handleCsSelect"],[0,"csClear","handleCsClear"],[0,"csClearHistory","handleCsClearHistory"],[0,"csRequestHistory","handleCsRequestHistory"],[0,"csLoadMore","handleCsLoadMore"],[0,"csRemoveItem","handleCsRemoveItem"],[0,"csFocus","handleCsFocus"],[0,"csBlur","handleCsBlur"],[0,"csEditSelection","handleCsEditSelection"]],{"required":[{"watchRequired":0}],"manualInput":[{"watchManualInput":0}],"history":[{"watchHistory":0}],"popular":[{"watchPopular":0}],"enableMultiple":[{"watchEnableMultiple":0}],"disabled":[{"watchDisabled":0}],"taxonomyData":[{"watchTaxonomyData":0}]}]]]], options);
20
+ });
@@ -0,0 +1 @@
1
+ module.exports = require('./cjs/index.cjs.js');
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from './esm/index.js';
@@ -0,0 +1,46 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ import { GenericItem, SelectorState, SelectorConfig } from './types';
3
+ export declare class CoreSelector {
4
+ private historyRequestTimer?;
5
+ disconnectedCallback(): void;
6
+ static nextId: number;
7
+ hostElement: HTMLElement;
8
+ state: SelectorState;
9
+ config: SelectorConfig;
10
+ label: string;
11
+ labelDescription?: string;
12
+ componentId: string;
13
+ size: 'small' | 'medium' | 'large';
14
+ csInput: EventEmitter<string>;
15
+ csSelect: EventEmitter<GenericItem>;
16
+ csClear: EventEmitter<void>;
17
+ csRemoveItem: EventEmitter<GenericItem>;
18
+ csBlur: EventEmitter<void>;
19
+ csEditSelection: EventEmitter<void>;
20
+ csFocus: EventEmitter<void>;
21
+ csLoadMore: EventEmitter<void>;
22
+ csClearHistory: EventEmitter<void>;
23
+ csRequestHistory: EventEmitter<void>;
24
+ afFocused: boolean;
25
+ private activeIndex;
26
+ private isFocusedInternal;
27
+ private isNavigatingWithKeyboard;
28
+ setFocus(): Promise<void>;
29
+ private inputRef;
30
+ private listRef;
31
+ private shouldFocusAfterRender;
32
+ private handleKeyDown;
33
+ private onWrapperFocusIn;
34
+ private onWrapperFocusOut;
35
+ handleAfFocusedChange(newValue: boolean): void;
36
+ handleConfigChange(newConfig: SelectorConfig): void;
37
+ handleStateChange(newState: SelectorState, oldState: SelectorState): void;
38
+ componentDidUpdate(): void;
39
+ private performFocusRestoration;
40
+ private handleScroll;
41
+ private scrollToActive;
42
+ private handleManualSelect;
43
+ render(): any;
44
+ private renderSearchContainer;
45
+ private renderSuggestionsList;
46
+ }
@@ -0,0 +1 @@
1
+ export type { FormattedText, GenericItem, SelectorConfig, SelectorSize, SelectorState, TextSegment, ValidationStatus, } from '@taxonomy/core/selector-types';
@@ -0,0 +1,7 @@
1
+ export type AfIconName = 'check' | 'search' | 'x';
2
+ interface AfIconProps {
3
+ name: AfIconName;
4
+ class?: string | Record<string, boolean>;
5
+ }
6
+ export declare const AfIcon: ({ name, class: className }: AfIconProps) => any;
7
+ export {};
@@ -0,0 +1,8 @@
1
+ interface AfLabelProps {
2
+ label: string;
3
+ forId: string;
4
+ description?: string;
5
+ required?: boolean;
6
+ }
7
+ export declare const AfLabel: ({ label, forId, description, required }: AfLabelProps) => any;
8
+ export {};
@@ -0,0 +1,8 @@
1
+ interface AfTagProps {
2
+ key?: string;
3
+ text: string;
4
+ breakWords?: boolean;
5
+ onRemove: () => void;
6
+ }
7
+ export declare const AfTag: ({ text, breakWords, onRemove }: AfTagProps) => any;
8
+ export {};
@@ -0,0 +1,9 @@
1
+ export type AfValidationVariant = 'error' | 'success' | 'warning';
2
+ interface AfValidationMessageProps {
3
+ variant: AfValidationVariant;
4
+ class?: string;
5
+ id?: string;
6
+ role?: string;
7
+ }
8
+ export declare const AfValidationMessage: (props: AfValidationMessageProps, children: any[]) => any;
9
+ export {};
@@ -0,0 +1,5 @@
1
+ export { AfIcon } from './af-icon';
2
+ export { AfLabel } from './af-label';
3
+ export { AfTag } from './af-tag';
4
+ export { AfValidationMessage } from './af-validation-message';
5
+ export type { AfValidationVariant } from './af-validation-message';
@@ -0,0 +1,24 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ import { GenericItem, SelectorState } from '../core-selector/types';
3
+ export declare class Geovaljaren {
4
+ label: string;
5
+ placeholder: string;
6
+ selectorState: SelectorState;
7
+ selectionEmitter: EventEmitter<GenericItem | null>;
8
+ private config;
9
+ private engine;
10
+ private allGeoItems;
11
+ componentWillLoad(): Promise<void>;
12
+ private showHistory;
13
+ private addToHistory;
14
+ private clearHistory;
15
+ handleInput(event: CustomEvent<string>): void;
16
+ handleFocus(): void;
17
+ handleRequestHistory(): void;
18
+ handleSelect(event: CustomEvent<GenericItem>): void;
19
+ handleBlur(): void;
20
+ handleClear(): void;
21
+ handleCsClearHistory(): void;
22
+ handleEdit(): void;
23
+ render(): any;
24
+ }
@@ -0,0 +1,7 @@
1
+ import { GenericItem } from '../../core-selector/types';
2
+ export declare const GeoAdapter: {
3
+ /**
4
+ * Transforms the pendlingskommuner JSON data structure into GenericItems.
5
+ */
6
+ toGenericItems: (jsonData: any) => GenericItem[];
7
+ };
@@ -0,0 +1,7 @@
1
+ import { GenericItem } from '../../core-selector/types';
2
+ export declare const GeoDataService: {
3
+ /**
4
+ * Simulates an async fetch of geo data
5
+ */
6
+ fetchAll: () => Promise<GenericItem[]>;
7
+ };
@@ -0,0 +1,6 @@
1
+ import { GenericItem } from '../../core-selector/types';
2
+ export declare const GeoHistoryService: {
3
+ saveHistory(history: GenericItem[]): void;
4
+ loadHistory(): GenericItem[];
5
+ clearHistory(): void;
6
+ };
@@ -0,0 +1,7 @@
1
+ import { GenericItem } from '../../core-selector/types';
2
+ export declare class SearchEngine {
3
+ private fuse;
4
+ constructor(data: GenericItem[]);
5
+ search(query: string, maxResults?: number): GenericItem[];
6
+ updateIndex(newData: GenericItem[]): void;
7
+ }
@@ -0,0 +1,4 @@
1
+ declare module '*.json' {
2
+ const value: any;
3
+ export default value;
4
+ }
@@ -0,0 +1,13 @@
1
+ import { IFuseOptions } from 'fuse.js';
2
+ import { TaxonomyItem } from './types';
3
+ export declare const MIN_INPUT_LENGTH = 1;
4
+ export declare const DEBOUNCE_TIME = 100;
5
+ export declare const MAX_RESULTS = 10;
6
+ export declare const FUSE_OPTIONS: IFuseOptions<TaxonomyItem>;
7
+ export declare const PLACEHOLDER_TEXT = "T.ex. fris\u00F6r, v\u00E5rdbitr\u00E4de, snickare";
8
+ export declare const NO_RESULTS_TEXT = "Inga resultat matchade din s\u00F6kning.";
9
+ export declare const VALIDATION_ERROR_REQUIRED_FIELD = "Du m\u00E5ste g\u00F6ra ett val";
10
+ export declare const VALIDATION_ERROR_EMPTY_FIELD = "V\u00E4lj ett yrke fr\u00E5n listan";
11
+ export declare const CLEAR_BUTTON_LABEL_TEXT = "Rensa s\u00F6kf\u00E4lt";
12
+ export declare const REMOVE_ITEM_LABEL_TEXT_PREFIX = "Ta bort";
13
+ export declare const POSITIVE_VALIDATION_TEXT = "Valt yrke";
@@ -0,0 +1,6 @@
1
+ import { SearchResult } from './types';
2
+ export declare const HistoryService: {
3
+ saveHistory(history: SearchResult[]): void;
4
+ loadHistory(): SearchResult[];
5
+ clearHistory(): void;
6
+ };