@pie-players/pie-assessment-toolkit 0.3.2 → 0.3.4

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 (90) hide show
  1. package/README.md +5 -8
  2. package/dist/components/ItemToolBar.custom-element.js +539 -94
  3. package/dist/index.d.ts +1 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/services/PNPToolResolver.d.ts.map +1 -1
  8. package/dist/services/PNPToolResolver.js +4 -1
  9. package/dist/services/PNPToolResolver.js.map +1 -1
  10. package/dist/services/ToolRegistry.d.ts +51 -0
  11. package/dist/services/ToolRegistry.d.ts.map +1 -1
  12. package/dist/services/ToolRegistry.js +60 -0
  13. package/dist/services/ToolRegistry.js.map +1 -1
  14. package/dist/services/ToolkitCoordinator.d.ts +12 -24
  15. package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
  16. package/dist/services/ToolkitCoordinator.js +60 -99
  17. package/dist/services/ToolkitCoordinator.js.map +1 -1
  18. package/dist/services/defaultPersonalNeedsProfile.js +2 -2
  19. package/dist/services/defaultPersonalNeedsProfile.js.map +1 -1
  20. package/dist/services/interfaces.d.ts +8 -3
  21. package/dist/services/interfaces.d.ts.map +1 -1
  22. package/dist/services/interfaces.js.map +1 -1
  23. package/dist/services/pnp-standard-features.d.ts +1 -1
  24. package/dist/services/tool-providers/index.d.ts +0 -4
  25. package/dist/services/tool-providers/index.d.ts.map +1 -1
  26. package/dist/services/tool-providers/index.js +0 -2
  27. package/dist/services/tool-providers/index.js.map +1 -1
  28. package/dist/services/tools-config-normalizer.d.ts +40 -3
  29. package/dist/services/tools-config-normalizer.d.ts.map +1 -1
  30. package/dist/services/tools-config-normalizer.js +86 -11
  31. package/dist/services/tools-config-normalizer.js.map +1 -1
  32. package/dist/tools/client.d.ts +0 -2
  33. package/dist/tools/client.d.ts.map +1 -1
  34. package/dist/tools/client.js +0 -4
  35. package/dist/tools/client.js.map +1 -1
  36. package/dist/tools/default-tool-module-loaders.js +1 -1
  37. package/dist/tools/default-tool-module-loaders.js.map +1 -1
  38. package/dist/tools/library-loader.d.ts.map +1 -1
  39. package/dist/tools/library-loader.js +0 -35
  40. package/dist/tools/library-loader.js.map +1 -1
  41. package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
  42. package/dist/tools/registrations/accessibility-tools.js +44 -41
  43. package/dist/tools/registrations/accessibility-tools.js.map +1 -1
  44. package/dist/tools/registrations/calculator.d.ts.map +1 -1
  45. package/dist/tools/registrations/calculator.js +50 -2
  46. package/dist/tools/registrations/calculator.js.map +1 -1
  47. package/dist/tools/registrations/interaction-tools.d.ts.map +1 -1
  48. package/dist/tools/registrations/interaction-tools.js +22 -28
  49. package/dist/tools/registrations/interaction-tools.js.map +1 -1
  50. package/dist/tools/registrations/measurement-tools.d.ts.map +1 -1
  51. package/dist/tools/registrations/measurement-tools.js +19 -27
  52. package/dist/tools/registrations/measurement-tools.js.map +1 -1
  53. package/dist/tools/registrations/subject-specific-tools.d.ts.map +1 -1
  54. package/dist/tools/registrations/subject-specific-tools.js +53 -37
  55. package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
  56. package/dist/tools/registrations/toolbar-registration-helpers.d.ts +15 -0
  57. package/dist/tools/registrations/toolbar-registration-helpers.d.ts.map +1 -0
  58. package/dist/tools/registrations/toolbar-registration-helpers.js +22 -0
  59. package/dist/tools/registrations/toolbar-registration-helpers.js.map +1 -0
  60. package/dist/tools/registrations/tts.d.ts.map +1 -1
  61. package/dist/tools/registrations/tts.js +49 -0
  62. package/dist/tools/registrations/tts.js.map +1 -1
  63. package/dist/tools/types.d.ts +1 -1
  64. package/dist/tools/types.d.ts.map +1 -1
  65. package/dist/tools/types.js.map +1 -1
  66. package/package.json +8 -10
  67. package/dist/services/tool-providers/MathJsToolProvider.d.ts +0 -25
  68. package/dist/services/tool-providers/MathJsToolProvider.d.ts.map +0 -1
  69. package/dist/services/tool-providers/MathJsToolProvider.js +0 -53
  70. package/dist/services/tool-providers/MathJsToolProvider.js.map +0 -1
  71. package/dist/services/tool-providers/TIToolProvider.d.ts +0 -107
  72. package/dist/services/tool-providers/TIToolProvider.d.ts.map +0 -1
  73. package/dist/services/tool-providers/TIToolProvider.js +0 -123
  74. package/dist/services/tool-providers/TIToolProvider.js.map +0 -1
  75. package/dist/tools/calculators/mathjs-provider.d.ts +0 -50
  76. package/dist/tools/calculators/mathjs-provider.d.ts.map +0 -1
  77. package/dist/tools/calculators/mathjs-provider.js +0 -660
  78. package/dist/tools/calculators/mathjs-provider.js.map +0 -1
  79. package/dist/tools/calculators/ti-provider.d.ts +0 -122
  80. package/dist/tools/calculators/ti-provider.d.ts.map +0 -1
  81. package/dist/tools/calculators/ti-provider.js +0 -710
  82. package/dist/tools/calculators/ti-provider.js.map +0 -1
  83. package/src/README.md +0 -626
  84. package/src/components/ItemToolBar.svelte +0 -717
  85. package/src/components/PieAssessmentToolkit.svelte +0 -681
  86. package/src/components/SectionToolBar.svelte +0 -58
  87. package/src/components/ToolButton.svelte +0 -146
  88. package/src/components/ToolButtonGroup.svelte +0 -125
  89. package/src/tools/README.md +0 -617
  90. package/src/tools/calculators/README.md +0 -395
@@ -1,58 +0,0 @@
1
- <svelte:options
2
- customElement={{
3
- tag: "pie-section-toolbar",
4
- shadow: "none",
5
- props: {
6
- enabledTools: { type: "String", attribute: "enabled-tools" },
7
- position: { type: "String", attribute: "position" },
8
- sectionId: { type: "String", attribute: "section-id" },
9
- size: { type: "String", attribute: "size" },
10
- language: { type: "String", attribute: "language" },
11
- toolRegistry: { type: "Object", reflect: false },
12
- pnpResolver: { type: "Object", reflect: false },
13
- assessment: { type: "Object", reflect: false },
14
- itemRef: { type: "Object", reflect: false },
15
- item: { type: "Object", reflect: false },
16
- hostButtons: { type: "Object", reflect: false },
17
- },
18
- }}
19
- />
20
-
21
- <script lang="ts">
22
- import "./item-toolbar-element.js";
23
- import type { ToolRegistry } from "../services/ToolRegistry.js";
24
- import type { PNPToolResolver } from "../services/PNPToolResolver.js";
25
- import type { AssessmentEntity, AssessmentItemRef, ItemEntity } from "@pie-players/pie-players-shared/types";
26
- import type { ToolbarItem } from "../services/toolbar-items.js";
27
-
28
- let {
29
- enabledTools = "",
30
- position = "bottom",
31
- sectionId = "",
32
- size = "md" as "sm" | "md" | "lg",
33
- language = "en-US",
34
- toolRegistry = null as ToolRegistry | null,
35
- pnpResolver = null as PNPToolResolver | null,
36
- assessment = null as AssessmentEntity | null,
37
- itemRef = null as AssessmentItemRef | null,
38
- item = null as ItemEntity | null,
39
- hostButtons = [] as ToolbarItem[],
40
- } = $props();
41
- </script>
42
-
43
- <pie-item-toolbar
44
- level="section"
45
- scope-id={sectionId}
46
- section-id={sectionId}
47
- tools={enabledTools}
48
- content-kind="section"
49
- position={position}
50
- {size}
51
- {language}
52
- {toolRegistry}
53
- {pnpResolver}
54
- {assessment}
55
- {itemRef}
56
- {item}
57
- {hostButtons}
58
- ></pie-item-toolbar>
@@ -1,146 +0,0 @@
1
- <script lang="ts">
2
- /**
3
- * ToolButton
4
- *
5
- * Generic button component for rendering tool buttons in toolbars.
6
- * Uses ToolToolbarButtonDefinition from ToolRegistry for consistent rendering.
7
- */
8
-
9
- import type { ToolToolbarButtonDefinition } from "../services/ToolRegistry.js";
10
-
11
- // Props
12
- let {
13
- button,
14
- class: className = "",
15
- }: {
16
- button: ToolToolbarButtonDefinition;
17
- class?: string;
18
- } = $props();
19
-
20
- // Handle button click
21
- function handleClick() {
22
- if (!button.disabled && button.onClick) {
23
- button.onClick();
24
- }
25
- }
26
-
27
- // Derive button classes
28
- const buttonClasses = $derived(
29
- [
30
- "tool-button",
31
- button.className,
32
- className,
33
- button.disabled ? "tool-button--disabled" : "",
34
- ]
35
- .filter(Boolean)
36
- .join(" "),
37
- );
38
- </script>
39
-
40
- <button
41
- type="button"
42
- class={buttonClasses}
43
- disabled={button.disabled}
44
- aria-label={button.ariaLabel}
45
- title={button.tooltip || button.label}
46
- onclick={handleClick}
47
- data-tool-id={button.toolId}
48
- >
49
- {#if button.icon}
50
- <span class="tool-button__icon" aria-hidden="true">
51
- {#if button.icon.startsWith("<svg")}
52
- <!-- Inline SVG -->
53
- {@html button.icon}
54
- {:else if button.icon.startsWith("http")}
55
- <!-- External image URL -->
56
- <img src={button.icon} alt="" />
57
- {:else}
58
- <!-- Icon name/class -->
59
- <i class={`icon icon-${button.icon}`}></i>
60
- {/if}
61
- </span>
62
- {/if}
63
- <span class="tool-button__label">{button.label}</span>
64
- </button>
65
-
66
- <style>
67
- .tool-button {
68
- display: inline-flex;
69
- align-items: center;
70
- gap: 0.5rem;
71
- padding: 0.5rem 1rem;
72
- background: var(--pie-button-bg, #ffffff);
73
- border: 1px solid var(--pie-button-border, #d1d5db);
74
- border-radius: 0.375rem;
75
- color: var(--pie-button-color, #374151);
76
- font-size: 0.875rem;
77
- font-weight: 500;
78
- cursor: pointer;
79
- transition: all 0.15s ease-in-out;
80
- white-space: nowrap;
81
- }
82
-
83
- .tool-button:hover:not(:disabled) {
84
- background: var(--pie-button-hover-bg, #f9fafb);
85
- border-color: var(--pie-button-hover-border, #9ca3af);
86
- color: var(--pie-button-hover-color, #111827);
87
- }
88
-
89
- .tool-button:active:not(:disabled) {
90
- background: var(--pie-button-active-bg, #f3f4f6);
91
- transform: translateY(1px);
92
- }
93
-
94
- .tool-button:focus-visible {
95
- outline: 2px solid var(--pie-button-focus-outline, #3b82f6);
96
- outline-offset: 2px;
97
- }
98
-
99
- .tool-button:disabled,
100
- .tool-button--disabled {
101
- opacity: 0.5;
102
- cursor: not-allowed;
103
- }
104
-
105
- .tool-button__icon {
106
- display: inline-flex;
107
- align-items: center;
108
- justify-content: center;
109
- width: 1.25rem;
110
- height: 1.25rem;
111
- flex-shrink: 0;
112
- }
113
-
114
- .tool-button__icon :global(svg) {
115
- width: 100%;
116
- height: 100%;
117
- fill: currentColor;
118
- }
119
-
120
- .tool-button__icon img {
121
- width: 100%;
122
- height: 100%;
123
- object-fit: contain;
124
- }
125
-
126
- .tool-button__label {
127
- line-height: 1.25;
128
- }
129
-
130
- /* Compact variant - icon only */
131
- .tool-button--compact .tool-button__label {
132
- position: absolute;
133
- width: 1px;
134
- height: 1px;
135
- padding: 0;
136
- margin: -1px;
137
- overflow: hidden;
138
- clip: rect(0, 0, 0, 0);
139
- white-space: nowrap;
140
- border-width: 0;
141
- }
142
-
143
- .tool-button--compact {
144
- padding: 0.5rem;
145
- }
146
- </style>
@@ -1,125 +0,0 @@
1
- <script lang="ts">
2
- /**
3
- * ToolButtonGroup
4
- *
5
- * Generic toolbar component that renders a group of tool buttons.
6
- * Implements the two-pass visibility model:
7
- * - Pass 1: Receives allowedToolIds from orchestrator (PNP/policies)
8
- * - Pass 2: Filters by tool relevance using ToolRegistry
9
- */
10
-
11
- import type {
12
- ToolRegistry,
13
- ToolToolbarButtonDefinition,
14
- ToolbarContext,
15
- } from "../services/ToolRegistry.js";
16
- import type { ToolContext } from "../services/tool-context.js";
17
- import ToolButton from "./ToolButton.svelte";
18
-
19
- // Props
20
- let {
21
- toolRegistry,
22
- allowedToolIds,
23
- context,
24
- toolbarContext,
25
- onToolClick,
26
- orientation = "horizontal",
27
- compact = false,
28
- class: className = "",
29
- }: {
30
- /** Tool registry for filtering and button creation */
31
- toolRegistry: ToolRegistry;
32
- /** Tool IDs allowed by orchestrator (Pass 1) */
33
- allowedToolIds: string[];
34
- /** Context for visibility evaluation (Pass 2) */
35
- context: ToolContext;
36
- /** Context used for toolbar rendering contract */
37
- toolbarContext: ToolbarContext;
38
- /** Callback when tool button is clicked */
39
- onToolClick?: (toolId: string) => void;
40
- /** Layout orientation */
41
- orientation?: "horizontal" | "vertical";
42
- /** Compact mode (icon only) */
43
- compact?: boolean;
44
- /** Additional CSS classes */
45
- class?: string;
46
- } = $props();
47
-
48
- // Two-pass visibility model
49
- // Pass 2: Filter by tool relevance
50
- const visibleTools = $derived(
51
- toolRegistry.filterVisibleInContext(allowedToolIds, context),
52
- );
53
-
54
- // Create button definitions for visible tools using the toolbar contract
55
- const buttons = $derived.by((): ToolToolbarButtonDefinition[] => {
56
- const rendered = visibleTools
57
- .map((tool) => toolRegistry.renderForToolbar(tool.toolId, context, toolbarContext))
58
- .filter((tool): tool is NonNullable<typeof tool> => Boolean(tool));
59
-
60
- return rendered
61
- .map((tool) => tool.button)
62
- .filter((button): button is ToolToolbarButtonDefinition => Boolean(button))
63
- .map((button) => ({
64
- ...button,
65
- onClick: () => {
66
- button.onClick();
67
- onToolClick?.(button.toolId);
68
- },
69
- className: compact
70
- ? `${button.className ? `${button.className} ` : ""}tool-button--compact`
71
- : button.className,
72
- }));
73
- });
74
-
75
- // Derive container classes
76
- const containerClasses = $derived(
77
- [
78
- "tool-button-group",
79
- `tool-button-group--${orientation}`,
80
- compact ? "tool-button-group--compact" : "",
81
- className,
82
- ]
83
- .filter(Boolean)
84
- .join(" "),
85
- );
86
- </script>
87
-
88
- {#if buttons.length > 0}
89
- <div class={containerClasses} role="toolbar" aria-label="Assessment tools">
90
- {#each buttons as button (button.toolId)}
91
- <ToolButton {button} />
92
- {/each}
93
- </div>
94
- {/if}
95
-
96
- <style>
97
- .tool-button-group {
98
- display: flex;
99
- gap: 0.5rem;
100
- padding: 0.5rem;
101
- background: var(--tool-button-group-bg, transparent);
102
- border-radius: 0.5rem;
103
- }
104
-
105
- .tool-button-group--horizontal {
106
- flex-direction: row;
107
- flex-wrap: wrap;
108
- align-items: center;
109
- }
110
-
111
- .tool-button-group--vertical {
112
- flex-direction: column;
113
- align-items: stretch;
114
- }
115
-
116
- .tool-button-group--compact {
117
- gap: 0.25rem;
118
- padding: 0.25rem;
119
- }
120
-
121
- /* Empty state - hide when no buttons */
122
- .tool-button-group:empty {
123
- display: none;
124
- }
125
- </style>