kempo-ui 0.4.7 → 0.4.9
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.
- package/AGENTS.md +24 -0
- package/CHANGELOG.md +20 -0
- package/dist/components/Timestamp.js +1 -1
- package/dist/utils/formatTimestamp.js +1 -1
- package/docs/components/timestamp.html +95 -2
- package/docs/src/components/Timestamp.js +1 -1
- package/docs/src/utils/formatTimestamp.js +1 -1
- package/docs-src/components/timestamp.page.html +95 -2
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/src/components/Timestamp.js +3 -3
- package/src/utils/formatTimestamp.js +2 -1
- package/tasks/_template.md +39 -0
- package/tasks/released/0001-identify-timestamp-formats/documentation-page-screenshot.png +0 -0
- package/tasks/released/0001-identify-timestamp-formats/format-examples-and-notes.png +0 -0
- package/tasks/released/0001-identify-timestamp-formats/supported-formats-section.png +0 -0
- package/tasks/released/0001-identify-timestamp-formats/validation-snapshot.txt +236 -0
- package/tasks/released/0001-identify-timestamp-formats.md +114 -0
- package/tests/components/Timestamp.browser-test.js +4 -4
- package/tests/components/Chat.browser-test.js +0 -540
package/AGENTS.md
CHANGED
|
@@ -96,6 +96,30 @@ Do not prefix identifiers with underscores.
|
|
|
96
96
|
- Use clear, descriptive names without prefixes.
|
|
97
97
|
- When true privacy is needed inside classes, prefer native JavaScript private fields (e.g., `#myField`) instead of simulated privacy via underscores.
|
|
98
98
|
|
|
99
|
+
## Template and File Structure Rules
|
|
100
|
+
|
|
101
|
+
### Follow Templates Exactly
|
|
102
|
+
When using templates (task templates, component scaffolds, etc.), follow them **exactly as written**. Do not:
|
|
103
|
+
- Add placeholder text or instructions to sections marked "leave blank"
|
|
104
|
+
- Deviate from the template structure
|
|
105
|
+
- Make creative changes or improvements to the template format
|
|
106
|
+
- Add commentary or helper text beyond what is explicitly requested
|
|
107
|
+
|
|
108
|
+
### Task Validation Result Sections - Critical Rules
|
|
109
|
+
Task files have two validation sections that follow specific timing rules:
|
|
110
|
+
|
|
111
|
+
**LLM Validation Results** (fill during step 6: task-validate)
|
|
112
|
+
- **Leave blank** during task-create and task-prepare skills
|
|
113
|
+
- **Fill in completely** during task-validate skill with:
|
|
114
|
+
- Subheading for each acceptance criterion tested
|
|
115
|
+
- Subheading for each testing plan item
|
|
116
|
+
- Pass/fail status with supporting evidence/screenshots
|
|
117
|
+
- At least one screenshot for visual changes
|
|
118
|
+
|
|
119
|
+
**User Validation Results** (optionally filled by user during step 7)
|
|
120
|
+
- **Always leave completely blank** — the user may optionally add notes here if they have additional information beyond what was documented in LLM Validation Results
|
|
121
|
+
- Never add placeholder text, never auto-fill this section
|
|
122
|
+
|
|
99
123
|
## Development Workflow
|
|
100
124
|
|
|
101
125
|
### Local Development Server
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.4.9] - 2026-05-01
|
|
10
|
+
### Changed
|
|
11
|
+
- **Timestamp component**: Enhanced documentation with comprehensive list of supported date/time input formats
|
|
12
|
+
- Supports EPOCH milliseconds, ISO 8601 (full, date-only, with/without timezone), RFC 2822, JavaScript date strings, US date format, and named month formats
|
|
13
|
+
- Added interactive examples and important notes about browser compatibility and timezone handling
|
|
14
|
+
- Updated llms.txt component reference with full format information
|
|
15
|
+
|
|
16
|
+
## [0.4.3] - 2026-04-30
|
|
17
|
+
### Added
|
|
18
|
+
- Initial CHANGELOG entry. All prior work is condensed into this log entry.
|
|
19
|
+
|
|
20
|
+
[0.4.3]: https://github.com/dustinpoissant/kempo-ui/releases/tag/v0.4.3
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{html as t}from"../lit-all.min.js";import e from"./ShadowComponent.js";import s from"../utils/formatTimestamp.js";export default class
|
|
1
|
+
import{html as t}from"../lit-all.min.js";import e from"./ShadowComponent.js";import s from"../utils/formatTimestamp.js";export default class i extends e{static properties={timestamp:{type:String,reflect:!0},format:{type:String,reflect:!0},locale:{type:String,reflect:!0}};constructor(){super(),this.timestamp="",this.format="",this.locale=""}render(){const e=this.timestamp?s(this.timestamp,this.format,this.locale||navigator.language):"";return t`<span>${e}</span>`}}window.customElements.define("k-timestamp",i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default(e,i,t)=>{const s=
|
|
1
|
+
export default(e,i,t)=>{const s=isNaN(e)?Date.parse(e):parseInt(e),l=new Date(s);if(i){const e=(e,i)=>("000"+e).slice(-1*i),t={YYYY:l.getFullYear(),YY:String(l.getFullYear()).slice(-2),MM:e(l.getMonth()+1,2),M:l.getMonth()+1,DD:e(l.getDate(),2),D:l.getDate(),hh:e(l.getHours(),2),h:l.getHours(),mm:e(l.getMinutes(),2),m:l.getMinutes(),ss:e(l.getSeconds(),2),s:l.getSeconds(),iiii:e(l.getMilliseconds(),3),iii:e(l.getMilliseconds(),3),ii:e(l.getMilliseconds(),2),i:l.getMilliseconds()};return i.replace(/YYYY|YY|MM|M|DD|D|hh|h|mm|m|ss|s|iiii|iii|ii|i/g,e=>t[e])}return l.toLocaleString(t||Intl.DateTimeFormat().resolvedOptions().locale)};
|
|
@@ -495,6 +495,7 @@
|
|
|
495
495
|
<ul>
|
|
496
496
|
<li><a href="#timeFormat">Time Format</a></li>
|
|
497
497
|
</ul>
|
|
498
|
+
<a href="#supportedFormats">Supported Input Formats</a><br />
|
|
498
499
|
|
|
499
500
|
<h6 class="mt"><a href="#jsRef" class="no-link">JavaScript Reference</a></h6>
|
|
500
501
|
<a href="#constructor">Constructor</a><br />
|
|
@@ -562,6 +563,98 @@
|
|
|
562
563
|
|
|
563
564
|
|
|
564
565
|
|
|
566
|
+
<h3 id="supportedFormats"><a href="#supportedFormats" class="no-link">Supported Input Formats</a></h3>
|
|
567
|
+
<p>The <code>Timestamp</code> component accepts various date/time input formats. The component uses JavaScript's <code>Date.parse()</code> for parsing, which supports multiple standard formats:</p>
|
|
568
|
+
|
|
569
|
+
<div class="table-wrapper mb">
|
|
570
|
+
<table>
|
|
571
|
+
<thead>
|
|
572
|
+
<tr>
|
|
573
|
+
<th>Format Type</th>
|
|
574
|
+
<th>Example</th>
|
|
575
|
+
<th>Notes</th>
|
|
576
|
+
</tr>
|
|
577
|
+
</thead>
|
|
578
|
+
<tbody>
|
|
579
|
+
<tr>
|
|
580
|
+
<td>EPOCH Milliseconds</td>
|
|
581
|
+
<td><code>1633024800000</code></td>
|
|
582
|
+
<td>Number value representing milliseconds since January 1, 1970</td>
|
|
583
|
+
</tr>
|
|
584
|
+
<tr>
|
|
585
|
+
<td>ISO 8601 (Full)</td>
|
|
586
|
+
<td><code>2021-10-01T00:00:00Z</code></td>
|
|
587
|
+
<td>Includes date, time, and UTC timezone indicator</td>
|
|
588
|
+
</tr>
|
|
589
|
+
<tr>
|
|
590
|
+
<td>ISO 8601 (Date Only)</td>
|
|
591
|
+
<td><code>2021-10-01</code></td>
|
|
592
|
+
<td>Date portion only; time assumed to be midnight in UTC</td>
|
|
593
|
+
</tr>
|
|
594
|
+
<tr>
|
|
595
|
+
<td>ISO 8601 (With Timezone)</td>
|
|
596
|
+
<td><code>2021-10-01T00:00:00+00:00</code></td>
|
|
597
|
+
<td>Includes timezone offset; can use +/- with hours and minutes</td>
|
|
598
|
+
</tr>
|
|
599
|
+
<tr>
|
|
600
|
+
<td>ISO 8601 (No Timezone)</td>
|
|
601
|
+
<td><code>2021-10-01T00:00:00</code></td>
|
|
602
|
+
<td>Interpreted as local time</td>
|
|
603
|
+
</tr>
|
|
604
|
+
<tr>
|
|
605
|
+
<td>RFC 2822</td>
|
|
606
|
+
<td><code>Fri, 01 Oct 2021 00:00:00 GMT</code></td>
|
|
607
|
+
<td>Email date format with day of week and timezone</td>
|
|
608
|
+
</tr>
|
|
609
|
+
<tr>
|
|
610
|
+
<td>JavaScript Date String</td>
|
|
611
|
+
<td><code>Fri Oct 01 2021 00:00:00 GMT+0000</code></td>
|
|
612
|
+
<td>Output format from JavaScript's <code>Date.toString()</code></td>
|
|
613
|
+
</tr>
|
|
614
|
+
<tr>
|
|
615
|
+
<td>US Date Format</td>
|
|
616
|
+
<td><code>10/01/2021</code></td>
|
|
617
|
+
<td>MM/DD/YYYY format; ambiguous with international formats</td>
|
|
618
|
+
</tr>
|
|
619
|
+
<tr>
|
|
620
|
+
<td>ISO Date String</td>
|
|
621
|
+
<td><code>2021-10-01 00:00:00</code></td>
|
|
622
|
+
<td>YYYY-MM-DD HH:MM:SS format</td>
|
|
623
|
+
</tr>
|
|
624
|
+
<tr>
|
|
625
|
+
<td>Named Month Format</td>
|
|
626
|
+
<td><code>October 1, 2021</code></td>
|
|
627
|
+
<td>Month name followed by day and year</td>
|
|
628
|
+
</tr>
|
|
629
|
+
</tbody>
|
|
630
|
+
</table>
|
|
631
|
+
</div>
|
|
632
|
+
|
|
633
|
+
<h5>Format Examples</h5>
|
|
634
|
+
<div class="row -mx mb">
|
|
635
|
+
<div class="col d-span-6 m-span-12 px">
|
|
636
|
+
<k-card label="ISO 8601">
|
|
637
|
+
<pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">k-timestamp</span> <span class="hljs-attr">timestamp</span>=<span class="hljs-string">"2021-10-01T00:00:00Z"</span>></span><span class="hljs-tag"></<span class="hljs-name">k-timestamp</span>></span></code></pre>
|
|
638
|
+
<p class="mt">Result:</p>
|
|
639
|
+
<k-timestamp timestamp="2021-10-01T00:00:00Z"></k-timestamp>
|
|
640
|
+
</k-card>
|
|
641
|
+
</div>
|
|
642
|
+
<div class="col d-span-6 m-span-12 px">
|
|
643
|
+
<k-card label="Named Month Format">
|
|
644
|
+
<pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">k-timestamp</span> <span class="hljs-attr">timestamp</span>=<span class="hljs-string">"October 1, 2021"</span>></span><span class="hljs-tag"></<span class="hljs-name">k-timestamp</span>></span></code></pre>
|
|
645
|
+
<p class="mt">Result:</p>
|
|
646
|
+
<k-timestamp timestamp="October 1, 2021"></k-timestamp>
|
|
647
|
+
</k-card>
|
|
648
|
+
</div>
|
|
649
|
+
</div>
|
|
650
|
+
|
|
651
|
+
<h5>Important Notes</h5>
|
|
652
|
+
<ul>
|
|
653
|
+
<li><strong>Browser Compatibility:</strong> Some formats may be parsed differently across browsers. ISO 8601 formats are the most reliable.</li>
|
|
654
|
+
<li><strong>Timezone Handling:</strong> Formats without explicit timezone information are interpreted as local time. ISO 8601 with <code>Z</code> or timezone offset are interpreted as absolute times.</li>
|
|
655
|
+
<li><strong>Format String Ambiguity:</strong> Ambiguous formats like <code>10/01/2021</code> may be interpreted differently depending on browser locale settings.</li>
|
|
656
|
+
</ul>
|
|
657
|
+
|
|
565
658
|
<h2 id="jsRef"><a href="#jsRef" class="no-link">JavaScript Reference</a></h2>
|
|
566
659
|
|
|
567
660
|
<h3 id="constructor"><a href="#constructor" class="no-link">Constructor</a></h3>
|
|
@@ -574,8 +667,8 @@
|
|
|
574
667
|
</ul>
|
|
575
668
|
|
|
576
669
|
<h3 id="properties"><a href="#properties" class="no-link">Properties</a></h3>
|
|
577
|
-
<h5><code>timestamp<i>: number</i></code></h5>
|
|
578
|
-
<p>The timestamp to be formatted and displayed. Syncs to <code>timestamp</code> attribute.</p>
|
|
670
|
+
<h5><code>timestamp<i>: string | number</i></code></h5>
|
|
671
|
+
<p>The timestamp to be formatted and displayed. Accepts EPOCH milliseconds (number), ISO 8601 formats, RFC 2822 formats, or other JavaScript-parseable date strings. See <a href="#supportedFormats">Supported Input Formats</a> for details. Syncs to <code>timestamp</code> attribute.</p>
|
|
579
672
|
<h5><code>format<i>: string</i></code></h5>
|
|
580
673
|
<p>The format to be used for formatting the timestamp using tokens like YYYY, MM, DD, hh, mm, ss. If not provided,
|
|
581
674
|
uses the default format. Syncs to <code>format</code> attribute.</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{html as t}from"../lit-all.min.js";import e from"./ShadowComponent.js";import s from"../utils/formatTimestamp.js";export default class
|
|
1
|
+
import{html as t}from"../lit-all.min.js";import e from"./ShadowComponent.js";import s from"../utils/formatTimestamp.js";export default class i extends e{static properties={timestamp:{type:String,reflect:!0},format:{type:String,reflect:!0},locale:{type:String,reflect:!0}};constructor(){super(),this.timestamp="",this.format="",this.locale=""}render(){const e=this.timestamp?s(this.timestamp,this.format,this.locale||navigator.language):"";return t`<span>${e}</span>`}}window.customElements.define("k-timestamp",i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default(e,i,t)=>{const s=
|
|
1
|
+
export default(e,i,t)=>{const s=isNaN(e)?Date.parse(e):parseInt(e),l=new Date(s);if(i){const e=(e,i)=>("000"+e).slice(-1*i),t={YYYY:l.getFullYear(),YY:String(l.getFullYear()).slice(-2),MM:e(l.getMonth()+1,2),M:l.getMonth()+1,DD:e(l.getDate(),2),D:l.getDate(),hh:e(l.getHours(),2),h:l.getHours(),mm:e(l.getMinutes(),2),m:l.getMinutes(),ss:e(l.getSeconds(),2),s:l.getSeconds(),iiii:e(l.getMilliseconds(),3),iii:e(l.getMilliseconds(),3),ii:e(l.getMilliseconds(),2),i:l.getMilliseconds()};return i.replace(/YYYY|YY|MM|M|DD|D|hh|h|mm|m|ss|s|iiii|iii|ii|i/g,e=>t[e])}return l.toLocaleString(t||Intl.DateTimeFormat().resolvedOptions().locale)};
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
<ul>
|
|
11
11
|
<li><a href="#timeFormat">Time Format</a></li>
|
|
12
12
|
</ul>
|
|
13
|
+
<a href="#supportedFormats">Supported Input Formats</a><br />
|
|
13
14
|
|
|
14
15
|
<h6 class="mt"><a href="#jsRef" class="no-link">JavaScript Reference</a></h6>
|
|
15
16
|
<a href="#constructor">Constructor</a><br />
|
|
@@ -77,6 +78,98 @@
|
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
|
|
81
|
+
<h3 id="supportedFormats"><a href="#supportedFormats" class="no-link">Supported Input Formats</a></h3>
|
|
82
|
+
<p>The <code>Timestamp</code> component accepts various date/time input formats. The component uses JavaScript's <code>Date.parse()</code> for parsing, which supports multiple standard formats:</p>
|
|
83
|
+
|
|
84
|
+
<div class="table-wrapper mb">
|
|
85
|
+
<table>
|
|
86
|
+
<thead>
|
|
87
|
+
<tr>
|
|
88
|
+
<th>Format Type</th>
|
|
89
|
+
<th>Example</th>
|
|
90
|
+
<th>Notes</th>
|
|
91
|
+
</tr>
|
|
92
|
+
</thead>
|
|
93
|
+
<tbody>
|
|
94
|
+
<tr>
|
|
95
|
+
<td>EPOCH Milliseconds</td>
|
|
96
|
+
<td><code>1633024800000</code></td>
|
|
97
|
+
<td>Number value representing milliseconds since January 1, 1970</td>
|
|
98
|
+
</tr>
|
|
99
|
+
<tr>
|
|
100
|
+
<td>ISO 8601 (Full)</td>
|
|
101
|
+
<td><code>2021-10-01T00:00:00Z</code></td>
|
|
102
|
+
<td>Includes date, time, and UTC timezone indicator</td>
|
|
103
|
+
</tr>
|
|
104
|
+
<tr>
|
|
105
|
+
<td>ISO 8601 (Date Only)</td>
|
|
106
|
+
<td><code>2021-10-01</code></td>
|
|
107
|
+
<td>Date portion only; time assumed to be midnight in UTC</td>
|
|
108
|
+
</tr>
|
|
109
|
+
<tr>
|
|
110
|
+
<td>ISO 8601 (With Timezone)</td>
|
|
111
|
+
<td><code>2021-10-01T00:00:00+00:00</code></td>
|
|
112
|
+
<td>Includes timezone offset; can use +/- with hours and minutes</td>
|
|
113
|
+
</tr>
|
|
114
|
+
<tr>
|
|
115
|
+
<td>ISO 8601 (No Timezone)</td>
|
|
116
|
+
<td><code>2021-10-01T00:00:00</code></td>
|
|
117
|
+
<td>Interpreted as local time</td>
|
|
118
|
+
</tr>
|
|
119
|
+
<tr>
|
|
120
|
+
<td>RFC 2822</td>
|
|
121
|
+
<td><code>Fri, 01 Oct 2021 00:00:00 GMT</code></td>
|
|
122
|
+
<td>Email date format with day of week and timezone</td>
|
|
123
|
+
</tr>
|
|
124
|
+
<tr>
|
|
125
|
+
<td>JavaScript Date String</td>
|
|
126
|
+
<td><code>Fri Oct 01 2021 00:00:00 GMT+0000</code></td>
|
|
127
|
+
<td>Output format from JavaScript's <code>Date.toString()</code></td>
|
|
128
|
+
</tr>
|
|
129
|
+
<tr>
|
|
130
|
+
<td>US Date Format</td>
|
|
131
|
+
<td><code>10/01/2021</code></td>
|
|
132
|
+
<td>MM/DD/YYYY format; ambiguous with international formats</td>
|
|
133
|
+
</tr>
|
|
134
|
+
<tr>
|
|
135
|
+
<td>ISO Date String</td>
|
|
136
|
+
<td><code>2021-10-01 00:00:00</code></td>
|
|
137
|
+
<td>YYYY-MM-DD HH:MM:SS format</td>
|
|
138
|
+
</tr>
|
|
139
|
+
<tr>
|
|
140
|
+
<td>Named Month Format</td>
|
|
141
|
+
<td><code>October 1, 2021</code></td>
|
|
142
|
+
<td>Month name followed by day and year</td>
|
|
143
|
+
</tr>
|
|
144
|
+
</tbody>
|
|
145
|
+
</table>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
<h5>Format Examples</h5>
|
|
149
|
+
<div class="row -mx mb">
|
|
150
|
+
<div class="col d-span-6 m-span-12 px">
|
|
151
|
+
<k-card label="ISO 8601">
|
|
152
|
+
<pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">k-timestamp</span> <span class="hljs-attr">timestamp</span>=<span class="hljs-string">"2021-10-01T00:00:00Z"</span>></span><span class="hljs-tag"></<span class="hljs-name">k-timestamp</span>></span></code></pre>
|
|
153
|
+
<p class="mt">Result:</p>
|
|
154
|
+
<k-timestamp timestamp="2021-10-01T00:00:00Z"></k-timestamp>
|
|
155
|
+
</k-card>
|
|
156
|
+
</div>
|
|
157
|
+
<div class="col d-span-6 m-span-12 px">
|
|
158
|
+
<k-card label="Named Month Format">
|
|
159
|
+
<pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">k-timestamp</span> <span class="hljs-attr">timestamp</span>=<span class="hljs-string">"October 1, 2021"</span>></span><span class="hljs-tag"></<span class="hljs-name">k-timestamp</span>></span></code></pre>
|
|
160
|
+
<p class="mt">Result:</p>
|
|
161
|
+
<k-timestamp timestamp="October 1, 2021"></k-timestamp>
|
|
162
|
+
</k-card>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<h5>Important Notes</h5>
|
|
167
|
+
<ul>
|
|
168
|
+
<li><strong>Browser Compatibility:</strong> Some formats may be parsed differently across browsers. ISO 8601 formats are the most reliable.</li>
|
|
169
|
+
<li><strong>Timezone Handling:</strong> Formats without explicit timezone information are interpreted as local time. ISO 8601 with <code>Z</code> or timezone offset are interpreted as absolute times.</li>
|
|
170
|
+
<li><strong>Format String Ambiguity:</strong> Ambiguous formats like <code>10/01/2021</code> may be interpreted differently depending on browser locale settings.</li>
|
|
171
|
+
</ul>
|
|
172
|
+
|
|
80
173
|
<h2 id="jsRef"><a href="#jsRef" class="no-link">JavaScript Reference</a></h2>
|
|
81
174
|
|
|
82
175
|
<h3 id="constructor"><a href="#constructor" class="no-link">Constructor</a></h3>
|
|
@@ -89,8 +182,8 @@
|
|
|
89
182
|
</ul>
|
|
90
183
|
|
|
91
184
|
<h3 id="properties"><a href="#properties" class="no-link">Properties</a></h3>
|
|
92
|
-
<h5><code>timestamp<i>: number</i></code></h5>
|
|
93
|
-
<p>The timestamp to be formatted and displayed. Syncs to <code>timestamp</code> attribute.</p>
|
|
185
|
+
<h5><code>timestamp<i>: string | number</i></code></h5>
|
|
186
|
+
<p>The timestamp to be formatted and displayed. Accepts EPOCH milliseconds (number), ISO 8601 formats, RFC 2822 formats, or other JavaScript-parseable date strings. See <a href="#supportedFormats">Supported Input Formats</a> for details. Syncs to <code>timestamp</code> attribute.</p>
|
|
94
187
|
<h5><code>format<i>: string</i></code></h5>
|
|
95
188
|
<p>The format to be used for formatting the timestamp using tokens like YYYY, MM, DD, hh, mm, ss. If not provided,
|
|
96
189
|
uses the default format. Syncs to <code>format</code> attribute.</p>
|
package/llms.txt
CHANGED
|
@@ -89,7 +89,7 @@ import { html, css, LitElement } from 'kempo-ui/src/lit-all.min.js';
|
|
|
89
89
|
| `<k-theme-select>` | `ThemeSelect.js` | Dropdown to pick a theme | [theme-select.html](https://dustinpoissant.github.io/kempo-ui/components/theme-select.html) |
|
|
90
90
|
| `<k-theme-switcher>` | `ThemeSwitcher.js` | Theme switcher with segmented and toggle display modes | [theme-switcher.html](https://dustinpoissant.github.io/kempo-ui/components/theme-switcher.html) |
|
|
91
91
|
| `<k-time>` | `Time.js` | Wraps native `<input type="time">` with segmented hour/minute/AM-PM editing; `value` is 24-hour `HH:MM`; `increment` attr sets minute step (arrow-key granularity); `military` attr forces 24-hour display via `lang="en-GB"`; form-associated; fires `change` | [time.html](https://dustinpoissant.github.io/kempo-ui/components/time.html) |
|
|
92
|
-
| `<k-timestamp>` | `Timestamp.js` | Displays a
|
|
92
|
+
| `<k-timestamp>` | `Timestamp.js` | Displays a formatted timestamp; accepts EPOCH milliseconds, ISO 8601, RFC 2822, and other JavaScript-parseable date formats; `value`/`format`/`locale` attributes | [timestamp.html](https://dustinpoissant.github.io/kempo-ui/components/timestamp.html) |
|
|
93
93
|
| `<k-toast>` `<k-toast-container>` | `Toast.js` | Toast notifications; use `<k-toast-container>` once in page, call `.addToast(options)` | [toast.html](https://dustinpoissant.github.io/kempo-ui/components/toast.html) |
|
|
94
94
|
| `<k-toggle>` | `Toggle.js` | On/off toggle; `value` (Boolean, reflects); methods: `on()`, `off()`, `toggle()`; fires `change`, `on`, `off` | [toggle.html](https://dustinpoissant.github.io/kempo-ui/components/toggle.html) |
|
|
95
95
|
| `<k-tree>` `<k-tree-node>` | `Tree.js` | Expandable tree; nodes have `label`, `icon`, `href`, `expanded` | [tree.html](https://dustinpoissant.github.io/kempo-ui/components/tree.html) |
|
package/package.json
CHANGED
|
@@ -4,14 +4,14 @@ import formatTimestamp from '../utils/formatTimestamp.js';
|
|
|
4
4
|
|
|
5
5
|
export default class Timestamp extends ShadowComponent {
|
|
6
6
|
static properties = {
|
|
7
|
-
timestamp: { type:
|
|
7
|
+
timestamp: { type: String, reflect: true },
|
|
8
8
|
format: { type: String, reflect: true },
|
|
9
9
|
locale: { type: String, reflect: true }
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
constructor() {
|
|
13
13
|
super();
|
|
14
|
-
this.timestamp =
|
|
14
|
+
this.timestamp = '';
|
|
15
15
|
this.format = '';
|
|
16
16
|
this.locale = '';
|
|
17
17
|
}
|
|
@@ -20,7 +20,7 @@ export default class Timestamp extends ShadowComponent {
|
|
|
20
20
|
Rendering Logic
|
|
21
21
|
*/
|
|
22
22
|
render() {
|
|
23
|
-
const formattedTime = this.timestamp
|
|
23
|
+
const formattedTime = this.timestamp
|
|
24
24
|
? formatTimestamp(this.timestamp, this.format, this.locale || navigator.language)
|
|
25
25
|
: '';
|
|
26
26
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export default (timestamp, format, forceLocale) => {
|
|
2
|
-
const
|
|
2
|
+
const ms = isNaN(timestamp) ? Date.parse(timestamp) : parseInt(timestamp);
|
|
3
|
+
const date = new Date(ms);
|
|
3
4
|
if (format) {
|
|
4
5
|
const pad = (num, size) => ('000' + num).slice(size * -1);
|
|
5
6
|
const tokens = {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# {Task Number} - {Task Description }
|
|
2
|
+
|
|
3
|
+
## Status: {Planning | Ready | Blocked | In Progress | Testing | Complete | Released}
|
|
4
|
+
|
|
5
|
+
## Dependency
|
|
6
|
+
{What other task needs to be completed first before this task can be started, prefer markdown links}
|
|
7
|
+
|
|
8
|
+
## References
|
|
9
|
+
{What other tasks or resources should the developer/LLM be aware of before starting this task, prefer markdown links}
|
|
10
|
+
|
|
11
|
+
## Current State
|
|
12
|
+
{How does this feature currently work}
|
|
13
|
+
|
|
14
|
+
## Aceptance Criteria
|
|
15
|
+
{How does it need to work to consider this task a success}
|
|
16
|
+
|
|
17
|
+
### In-Scope
|
|
18
|
+
{What are some examples of repos/files/ect that can be changed to do this task}
|
|
19
|
+
|
|
20
|
+
### Out of Scope
|
|
21
|
+
{What are some examples of repos/files/ect that should not be changed to do this task, if we find a need to, create a new task (in this repo, or that repo)}
|
|
22
|
+
|
|
23
|
+
## Task Details
|
|
24
|
+
{What steps need to happen to complete this task}
|
|
25
|
+
|
|
26
|
+
## Testing / Validation Plan
|
|
27
|
+
{How should this task be tested/validated, make sure all of the acceptance criteria is covered by the test plan}
|
|
28
|
+
|
|
29
|
+
### Testing / Validation Results
|
|
30
|
+
|
|
31
|
+
#### LLM Validation Results
|
|
32
|
+
**IMPORTANT: DO NOT fill this in during task-create or task-prepare.** This section is filled in during the "task-validate" skill (which is linked from the "task-complete" skill step 6). Include:
|
|
33
|
+
- Subheadings for each acceptance criterion that was validated
|
|
34
|
+
- Subheadings for each item in the testing plan
|
|
35
|
+
- Pass/fail status and details for each item
|
|
36
|
+
- Screenshots or evidence showing validation passed
|
|
37
|
+
|
|
38
|
+
#### User Validation Results
|
|
39
|
+
**IMPORTANT: Always leave this section completely blank.** The user may optionally add notes here during the "task-complete" skill step 7 of task-complete if they have additional validation information beyond what the LLM documented in the LLM Validation Results section.
|
|
Binary file
|
|
Binary file
|